Beispiel #1
0
        public void QueryCacheTest()
        {
            var sessionFactory = IoC.Resolve <ISessionFactory>();
            //Create and save entities. Reopen conversation to clean 1-st level cache.
            var item1 = new SimpleCacheEntity
            {
                Name = "Query Cache Test #1"
            };
            var item2 = new SimpleCacheEntity
            {
                Name = "Query Cache Test #2"
            };

            Repository.Data.Save(item1);
            Repository.Data.Save(item2);

            ConversationHelper.ReOpen();


            //Query the entities by name
            var query       = Repository.Data.Get <SimpleCacheEntity>().Where(x => x.Name.Contains("Query Cache Test"));
            var queryResult = query.All();

            Assert.NotEmpty(queryResult);

            ConversationHelper.ReOpen();

            //Query once again and check if the result is loaded from cache instead of getting from DB.
            Console.WriteLine("*** No call to DB should be done from this moment ***");
            sessionFactory.Statistics.Clear();
            var cachedQueryResult = query.All();

            Assert.NotEmpty(cachedQueryResult);
            Assert.Equal(0, sessionFactory.Statistics.EntityLoadCount);
        }
Beispiel #2
0
        public void EntityCacheTest()
        {
            var sessionFactory = IoC.Resolve <ISessionFactory>();
            //Create and save entity. Reopen conversation to clean 1-st level cache.
            var item = new SimpleCacheEntity
            {
                Name = "Cache Test #1"
            };

            Repository.Data.Save(item);
            ConversationHelper.ReOpen();

            //Check if entity exists in cache directly.
            var cache = GetCachedObjectDirectly(item.Id, item.GetType());

            Assert.NotNull(cache);

            //Check if entity is loaded from cache instead of getting from DB.
            Console.WriteLine("*** No call to DB should be done from this moment ***");
            sessionFactory.Statistics.Clear();
            var retrievedEntity = Repository.Data.Get <SimpleCacheEntity>(item.Id);

            Assert.NotNull(retrievedEntity);
            Assert.Equal(item.Id, retrievedEntity.Id);
            Assert.Equal(item.Name, retrievedEntity.Name);
            Assert.Equal(0, sessionFactory.Statistics.EntityLoadCount);
        }
Beispiel #3
0
        public void NestedUnitsWithSameScopeInnerException()
        {
            var entity = new SimpleEntity
            {
                Name = "UnitTest"
            };
            var entity2 = new SimpleEntity
            {
                Name = "UnitTest2"
            };

            using (var unit = new UnitOfWork())
            {
                Repository.Data.Save(entity);
                using (var unit2 = new UnitOfWork())
                {
                    Repository.Data.Save(entity2);
                    Assert.Throws <UnitOfWorkException>(() => unit2.Rollback());
                    // will throw exception because this is not the owner of the UOW
                }

                // user will not come to this point and try to commit transaction
                // else it should throw exception
                Assert.Throws <UnitOfWorkException>(() => unit.Commit());
            }

            Repository.Data.Cache.Clear(typeof(SimpleEntity));
            ConversationHelper.ReOpen();
            entity  = Repository.Data.Get <SimpleEntity>(entity.Id);
            entity2 = Repository.Data.Get <SimpleEntity>(entity2.Id);
            Assert.Null(entity);
            Assert.Null(entity2);
        }
Beispiel #4
0
        public void NestedUnitsWithNewInnerScopeRollbackAndCommitTest()
        {
            var entity = new SimpleEntity
            {
                Name = "UnitTest"
            };
            var entity2 = new SimpleEntity
            {
                Name = "UnitTest2"
            };

            using (var unit = new UnitOfWork())
            {
                Repository.Data.Save(entity);
                using (var unit2 = new UnitOfWork(UnitOfWorkScopeType.New))
                {
                    Repository.Data.Save(entity2);
                    unit2.Rollback();
                }
                unit.Commit();
            }

            Repository.Data.Cache.Clear(typeof(SimpleEntity));
            ConversationHelper.ReOpen();

            entity  = Repository.Data.Get <SimpleEntity>(entity.Id);
            entity2 = Repository.Data.Get <SimpleEntity>(entity2.Id);
            Assert.NotNull(entity);
            Assert.Null(entity2);
        }
Beispiel #5
0
        public void NestedUnitsWithSameScopeRollbackBothTest()
        {
            var entity = new SimpleEntity
            {
                Name = "UnitTest"
            };
            var entity2 = new SimpleEntity
            {
                Name = "UnitTest2"
            };

            using (var unit = new UnitOfWork())
            {
                Repository.Data.Save(entity);
                using (var unit2 = new UnitOfWork())
                {
                    Repository.Data.Save(entity2);
                    Assert.Throws <UnitOfWorkException>(() => unit2.Rollback());
                }
                unit.Rollback();
            }

            Repository.Data.Cache.Clear(typeof(SimpleEntity));
            ConversationHelper.ReOpen();

            entity  = Repository.Data.Get <SimpleEntity>(entity.Id);
            entity2 = Repository.Data.Get <SimpleEntity>(entity2.Id);
            Assert.Null(entity);
            Assert.Null(entity2);
        }
Beispiel #6
0
        public void UnitOfWorkRollBackAfterRollbackTest()
        {
            var entity = new SimpleEntity
            {
                Name = "UnitTest"
            };
            var entity2 = new SimpleEntity
            {
                Name = "UnitTest2"
            };

            using (var unit = new UnitOfWork())
            {
                //Some external method
                Repository.Data.Save(entity);
                UnitOfWork.Current.Rollback();

                Assert.Throws <UnitOfWorkException>(() => Repository.Data.Save(entity2));
                unit.Rollback();
            }

            Repository.Data.Cache.Clear(entity);
            ConversationHelper.ReOpen();

            entity = Repository.Data.Get <SimpleEntity>(entity.Id);
            Assert.Null(entity);
            entity2 = Repository.Data.Get <SimpleEntity>(entity2.Id);
            Assert.Null(entity2);
        }
Beispiel #7
0
        public void NestedUnitsWithSameScopeOuterDisposeTest()
        {
            var entity = new SimpleEntity
            {
                Name = "UnitTest"
            };
            var entity2 = new SimpleEntity
            {
                Name = "UnitTest2"
            };

            using (new UnitOfWork())
            {
                Repository.Data.Save(entity);
                using (var unit2 = new UnitOfWork())
                {
                    Repository.Data.Save(entity2);
                    unit2.Commit();
                }
            }

            Repository.Data.Cache.Clear(typeof(SimpleEntity));
            ConversationHelper.ReOpen();

            entity  = Repository.Data.Get <SimpleEntity>(entity.Id);
            entity2 = Repository.Data.Get <SimpleEntity>(entity2.Id);
            Assert.Null(entity);
            Assert.Null(entity2);
        }
Beispiel #8
0
        public void NestedUnitsCombinatedTest()
        {
            var entity = new SimpleEntity
            {
                Name = "UnitTest"
            };
            var entity2 = new SimpleEntity
            {
                Name = "UnitTest2"
            };
            var entity3 = new SimpleEntity
            {
                Name = "UnitTest3"
            };
            var entity4 = new SimpleEntity
            {
                Name = "UnitTest4"
            };

            using (var unit = new UnitOfWork())
            {
                Repository.Data.Save(entity);

                using (var unit2 = new UnitOfWork())
                {
                    Repository.Data.Save(entity2);
                    using (var unit3 = new UnitOfWork())
                    {
                        Repository.Data.Save(entity3);
                        unit3.Commit();
                    }
                    using (var unit4 = new UnitOfWork(UnitOfWorkScopeType.New))
                    {
                        Repository.Data.Save(entity4);
                        unit4.Commit();
                    }
                    Assert.Throws <UnitOfWorkException>(() => unit2.Rollback());
                }

                Assert.Throws <UnitOfWorkException>(() => unit.Commit());
            }

            Repository.Data.Cache.Clear(typeof(SimpleEntity));
            ConversationHelper.ReOpen();

            entity  = Repository.Data.Get <SimpleEntity>(entity.Id);
            entity2 = Repository.Data.Get <SimpleEntity>(entity2.Id);
            entity3 = Repository.Data.Get <SimpleEntity>(entity3.Id);
            entity4 = Repository.Data.Get <SimpleEntity>(entity4.Id);
            Assert.Null(entity);
            Assert.Null(entity2);
            Assert.Null(entity3);
            Assert.NotNull(entity4);
        }
Beispiel #9
0
        public void SaveClassWithStorageInfo()
        {
            Guid id;

            using (var tx = new TransactionScope())
            {
                var e = new TestStorageEntity
                {
                    Name          = "My file",
                    StorageStream = GetType().Assembly.GetManifestResourceStream(GetType().Namespace + ".IMGP2526.jpg")
                };
                Repository.Data.Save(e);
                id = e.Id;
                tx.Complete();
            }
            ConversationHelper.ReOpen();

            using (var tx = new TransactionScope())
            {
                var e = Repository.Data.Get <TestStorageEntity>(id);
                e.Name += "1";
                Repository.Data.Save(e);
                tx.Complete();
            }
            ConversationHelper.ReOpen();

            using (var tx = new TransactionScope())
            {
                var e = Repository.Data.Get <TestStorageEntity>(id);
                e.Name         += "2";
                e.StorageStream = GetType().Assembly.GetManifestResourceStream(GetType().Namespace + ".IMGP2526.jpg");
                Repository.Data.Save(e);
                tx.Complete();
            }
            ConversationHelper.ReOpen();

            using (new TransactionScope())
            {
                var e = Repository.Data.Get <TestStorageEntity>(id);
                e.Name         += "3";
                e.StorageStream = GetType().Assembly.GetManifestResourceStream(GetType().Namespace + ".IMGP2526.jpg");
                Repository.Data.Save(e);
            }
            ConversationHelper.ReOpen();

            using (var tx = new TransactionScope())
            {
                var e = Repository.Data.Get <TestStorageEntity>(id);
                Repository.Data.Delete(e);
                tx.Complete();
            }
            ConversationHelper.ReOpen();
        }
Beispiel #10
0
        public void LongRunningPreAsyncEvent()
        {
            var item = new SimpleEventEntity
            {
                Name = "AsyncCreated should not be aborted since event is handled asynchronously"
            };

            Repository.Data.Save(item);

            ConversationHelper.ReOpen();

            var item2 = Repository.Data.Get <SimpleEventEntity>(item.Id);

            Assert.NotNull(item2);
        }
Beispiel #11
0
        public void LongRunningPreEvent()
        {
            var item = new SimpleEventEntity
            {
                Name = "Created should be aborted"
            };

            Assert.Throws <TransactionManagerCommunicationException>(() => Repository.Data.Save(item));

            ConversationHelper.ReOpen();

            var item2 = Repository.Data.Get <SimpleEventEntity>(item.Id);

            Assert.Null(item2);
        }
Beispiel #12
0
        public void ChangeNameInEvent()
        {
            var item = new SimpleEventEntity
            {
                Name = "ChangeMe #1"
            };

            Repository.Data.Save(item);
            Assert.Equal("ChangeMe #1 create created", item.Name);

            ConversationHelper.ReOpen();

            var item2 = Repository.Data.Get <SimpleEventEntity>(item.Id);

            Assert.Equal("ChangeMe #1 create", item2.Name);
        }
Beispiel #13
0
        public void NestedUnitsWithSameScopeRollbackAndCommitActionTest()
        {
            var entity = new SimpleEntity
            {
                Name = "UnitTest"
            };
            var entity2 = new SimpleEntity
            {
                Name = "UnitTest2"
            };

            using (var unit = new UnitOfWork())
            {
                int onCommitActionsCount;
                int onRollBackActionsCount;

                UnitOfWork.Current.PostCommitActions.Add(() => { });
                UnitOfWork.Current.PostRollbackActions.Add(() => { });
                Repository.Data.Save(entity);
                Assert.Equal(1, UnitOfWork.Current.PostCommitActions.Count);
                Assert.Equal(1, UnitOfWork.Current.PostRollbackActions.Count);

                using (var unit2 = new UnitOfWork())
                {
                    UnitOfWork.Current.PostCommitActions.Add(() => { });
                    UnitOfWork.Current.PostRollbackActions.Add(() => { });
                    onCommitActionsCount   = UnitOfWork.Current.PostCommitActions.Count;
                    onRollBackActionsCount = UnitOfWork.Current.PostRollbackActions.Count;
                    Repository.Data.Save(entity2);
                    Assert.Throws <UnitOfWorkException>(() => unit2.Rollback());
                }

                Assert.Equal(2, onCommitActionsCount);
                Assert.Equal(2, onRollBackActionsCount);
                Assert.Throws <UnitOfWorkException>(() => unit.Commit());
            }

            Repository.Data.Cache.Clear(typeof(SimpleEntity));
            ConversationHelper.ReOpen();

            entity  = Repository.Data.Get <SimpleEntity>(entity.Id);
            entity2 = Repository.Data.Get <SimpleEntity>(entity2.Id);
            Assert.Null(entity);
            Assert.Null(entity2);
        }
Beispiel #14
0
        public void ScopeWithoutException()
        {
            var entity = new SimpleEntity
            {
                Name = "UnitTest"
            };

            using (var unit = new UnitOfWork())
            {
                Repository.Data.Save(entity);
                unit.Rollback();                 // will not throw exception
            }

            Repository.Data.Cache.Clear(typeof(SimpleEntity));
            ConversationHelper.ReOpen();
            entity = Repository.Data.Get <SimpleEntity>(entity.Id);
            Assert.Null(entity);
        }
Beispiel #15
0
        public void UnitOfWorkRollbackTest()
        {
            var entity = new SimpleEntity
            {
                Name = "UnitTest"
            };

            using (var unit = new UnitOfWork())
            {
                Repository.Data.Save(entity);
                unit.Rollback();
            }

            Repository.Data.Cache.Clear(entity);
            ConversationHelper.ReOpen();

            entity = Repository.Data.Get <SimpleEntity>(entity.Id);
            Assert.Null(entity);
        }
Beispiel #16
0
        public void NestedUnitsWithInnerScopeRollbackAndCommitActionTest()
        {
            var entity = new SimpleEntity
            {
                Name = "UnitTest"
            };
            var entity2 = new SimpleEntity
            {
                Name = "UnitTest2"
            };

            using (var unit = new UnitOfWork())
            {
                UnitOfWork.Current.PostCommitActions.Add(() => { });
                UnitOfWork.Current.PostRollbackActions.Add(() => { });
                Repository.Data.Save(entity);
                Assert.Equal(1, UnitOfWork.Current.PostCommitActions.Count);
                Assert.Equal(1, UnitOfWork.Current.PostRollbackActions.Count);


                using (var unit2 = new UnitOfWork(UnitOfWorkScopeType.New))
                {
                    UnitOfWork.Current.PostCommitActions.Add(() => { });
                    UnitOfWork.Current.PostRollbackActions.Add(() => { });
                    Repository.Data.Save(entity2);
                    unit2.Rollback();
                }

                Assert.Equal(1, UnitOfWork.Current.PostCommitActions.Count);
                Assert.Equal(1, UnitOfWork.Current.PostRollbackActions.Count);
                unit.Commit();
            }

            Repository.Data.Cache.Clear(typeof(SimpleEntity));
            ConversationHelper.ReOpen();

            entity  = Repository.Data.Get <SimpleEntity>(entity.Id);
            entity2 = Repository.Data.Get <SimpleEntity>(entity2.Id);
            Assert.NotNull(entity);
            Assert.Null(entity2);
        }
Beispiel #17
0
        public void TryToAutoMergeIfNeeded()
        {
            var item = new SimpleEntity
            {
                Name = "PageType #1"
            };

            Repository.Data.Save(item);
            ConversationHelper.ReOpen();

            item       = Repository.Data.Get <SimpleEntity>(item.Id);
            item.Name += ".2";

            Repository.Data.Save(item);

            ConversationHelper.ReOpen();
            Repository.Data.Get <SimpleEntity>(item.Id);

            item.Name += ".3";
            Repository.Data.Save(item);
        }