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_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);
            }
        }