public void ChangeTracker_ChangeOneToManyChild_WithAutoTrackChangesOff_ShouldNotUpdateChildInDb() { try { TransactionFactory.DbGate.Config.DirtyCheckStrategy = DirtyCheckStrategy.Manual; IDbConnection connection = SetupTables(); ITransaction transaction = CreateTransaction(connection); int id = 45; DirtyCheckTestRootEntity entity = new DirtyCheckTestRootEntity(); entity.IdCol = id; entity.Name = "Org-Name"; DirtyCheckTestOne2ManyEntity one2ManyEntity = new DirtyCheckTestOne2ManyEntity(); one2ManyEntity.IdCol = id; one2ManyEntity.IndexNo = 1; one2ManyEntity.Name = "Child-Org-Name"; entity.One2ManyEntities.Add(one2ManyEntity); entity.Persist(transaction); transaction.Commit(); transaction = CreateTransaction(connection); DirtyCheckTestRootEntity loadedEntity = new DirtyCheckTestRootEntity(); LoadEntityWithId(transaction, loadedEntity, id); IEnumerator <DirtyCheckTestOne2ManyEntity> enumerator = loadedEntity.One2ManyEntities.GetEnumerator(); enumerator.MoveNext(); DirtyCheckTestOne2ManyEntity loadedChild = enumerator.Current; loadedChild.Name = "Child-Upd-Name"; loadedEntity.Persist(transaction); transaction.Commit(); transaction = CreateTransaction(connection); DirtyCheckTestRootEntity reloadedEntity = new DirtyCheckTestRootEntity(); LoadEntityWithId(transaction, reloadedEntity, id); enumerator = reloadedEntity.One2ManyEntities.GetEnumerator(); enumerator.MoveNext(); DirtyCheckTestOne2ManyEntity reLoadedChild = enumerator.Current; transaction.Commit(); connection.Close(); Assert.AreEqual(reLoadedChild.Name, one2ManyEntity.Name); } catch (System.Exception e) { LogManager.GetLogger(typeof(DbGateDirtyCheckTest)).Fatal(e.Message, e); Assert.Fail(e.Message); } }
public void ChangeTracker_ChangeField_WithAutoTrackChangesOnAndClearTracker_ShouldUpdateTheEntityInDb() { try { TransactionFactory.DbGate.Config.DirtyCheckStrategy = DirtyCheckStrategy.Automatic; IDbConnection connection = SetupTables(); ITransaction transaction = CreateTransaction(connection); int id = 45; DirtyCheckTestRootEntity entity = new DirtyCheckTestRootEntity(); entity.IdCol = id; entity.Name = "Org-Name"; entity.Persist(transaction); transaction.Commit(); transaction = CreateTransaction(connection); DirtyCheckTestRootEntity loadedEntity = new DirtyCheckTestRootEntity(); LoadEntityWithId(transaction, loadedEntity, id); transaction.Commit(); var changeTracker = loadedEntity.Context.ChangeTracker; changeTracker.GetType().GetField("_fields", BindingFlags.Instance | BindingFlags.NonPublic) .SetValue(changeTracker, new ReadOnlyCollection <EntityFieldValue>(new List <EntityFieldValue>())); changeTracker.GetType().GetField("_childEntityRelationKeys", BindingFlags.Instance | BindingFlags.NonPublic) .SetValue(changeTracker, new ReadOnlyCollection <ITypeFieldValueList>(new List <ITypeFieldValueList>())); transaction = CreateTransaction(connection); loadedEntity.Name = "Changed-Name"; loadedEntity.Persist(transaction); transaction.Commit(); transaction = CreateTransaction(connection); DirtyCheckTestRootEntity reloadedEntity = new DirtyCheckTestRootEntity(); LoadEntityWithId(transaction, reloadedEntity, id); transaction.Commit(); connection.Close(); Assert.AreEqual(loadedEntity.Name, reloadedEntity.Name); } catch (System.Exception e) { LogManager.GetLogger(typeof(DbGateDirtyCheckTest)).Fatal(e.Message, e); Assert.Fail(e.Message); } }
public void ChangeTracker_RemoveOneToManyChild_WithAutoTrackChangesOff_ShouldDeleteChildInDb() { try { TransactionFactory.DbGate.Config.DirtyCheckStrategy = DirtyCheckStrategy.Manual; IDbConnection connection = SetupTables(); ITransaction transaction = CreateTransaction(connection); int id = 45; DirtyCheckTestRootEntity entity = new DirtyCheckTestRootEntity(); entity.IdCol = id; entity.Name = "Org-Name"; DirtyCheckTestOne2ManyEntity one2ManyEntity = new DirtyCheckTestOne2ManyEntity(); one2ManyEntity.IdCol = id; one2ManyEntity.IndexNo = 1; one2ManyEntity.Name = "Child-Org-Name"; entity.One2ManyEntities.Add(one2ManyEntity); entity.Persist(transaction); transaction.Commit(); transaction = CreateTransaction(connection); DirtyCheckTestRootEntity loadedEntity = new DirtyCheckTestRootEntity(); LoadEntityWithId(transaction, loadedEntity, id); loadedEntity.One2ManyEntities.Clear(); loadedEntity.Persist(transaction); transaction.Commit(); transaction = CreateTransaction(connection); bool hasOne2Many = ExistsOne2ManyChild(transaction, id); transaction.Commit(); connection.Close(); Assert.IsFalse(hasOne2Many); } catch (System.Exception e) { LogManager.GetLogger(typeof(DbGateDirtyCheckTest)).Fatal(e.Message, e); Assert.Fail(e.Message); } }
public void ChangeTracker_ChangeField_WithAutoTrackChangesOn_ShouldUpdateTheEntityInDb() { try { TransactionFactory.DbGate.Config.DirtyCheckStrategy = DirtyCheckStrategy.Automatic; IDbConnection connection = SetupTables(); ITransaction transaction = CreateTransaction(connection); int id = 45; DirtyCheckTestRootEntity entity = new DirtyCheckTestRootEntity(); entity.IdCol = id; entity.Name = "Org-Name"; entity.Persist(transaction); transaction.Commit(); transaction = CreateTransaction(connection); DirtyCheckTestRootEntity loadedEntity = new DirtyCheckTestRootEntity(); LoadEntityWithId(transaction, loadedEntity, id); transaction.Commit(); transaction = CreateTransaction(connection); loadedEntity.Name = "Changed-Name"; loadedEntity.Persist(transaction); transaction.Commit(); transaction = CreateTransaction(connection); DirtyCheckTestRootEntity reloadedEntity = new DirtyCheckTestRootEntity(); LoadEntityWithId(transaction, reloadedEntity, id); transaction.Commit(); connection.Close(); Assert.AreEqual(loadedEntity.Name, reloadedEntity.Name); } catch (System.Exception e) { LogManager.GetLogger(typeof(DbGateDirtyCheckTest)).Fatal(e.Message, e); Assert.Fail(e.Message); } }