コード例 #1
0
        private bool LoadEntityWithId(ITransaction transaction, DirtyCheckTestRootEntity loadEntity, int id)
        {
            bool loaded = false;

            IDbCommand cmd = transaction.CreateCommand();

            cmd.CommandText = "select * from dirty_check_test_root where id_col = ?";

            IDbDataParameter parameter = cmd.CreateParameter();

            cmd.Parameters.Add(parameter);
            parameter.DbType    = DbType.Int32;
            parameter.Direction = ParameterDirection.Input;
            parameter.Value     = id;

            IDataReader dataReader = cmd.ExecuteReader();

            if (dataReader.Read())
            {
                loadEntity.Retrieve(dataReader, transaction);
                loaded = true;
            }

            return(loaded);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
            }
        }