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