2010-01-21 38 views
1

我有一個存儲庫類,使用NHibernate會話將對象持久存儲到數據庫。默認情況下,存儲庫不使用顯式事務 - 這由調用者來管理。我有以下的單元測試來測試我的NHibernate的管道:NHibernate - 在查詢之前刷新?

[Test] 
public void NHibernate_BaseRepositoryProvidesRequiredMethods() 
{    
    using (var unitOfWork = UnitOfWork.Create()) 
    { 
     // test the add method 
     TestRepo.Add(new TestObject() { Id = 1, Name = "Testerson" }); 
     TestRepo.Add(new TestObject() { Id = 2, Name = "Testerson2" }); 
     TestRepo.Add(new TestObject() { Id = 3, Name = "Testerson3" }); 

     // test the getall method 
     var objects = TestRepo.GetAll(); 
     Assert.AreEqual(3, objects.Length); 

     // test the remove method 
     TestRepo.Remove(objects[1]); 
     objects = TestRepo.GetAll(); 
     Assert.AreEqual(2, objects.Length); 

     // test the get method 
     var obj = TestRepo.Get(objects[1].Id); 
     Assert.AreSame(objects[1], obj); 
    } 
} 

的問題是該行

Assert.AreEqual(3, objects.Length); 

測試失敗,因爲對象名單從GetAll方法返回的是空的。如果我在插入三個對象後立即手動刷新會話,則該部分測試通過。我在會話中使用默認的FlushMode,並根據文檔,它應該在運行查詢之前刷新以檢索所有對象,但顯然不是。我錯過了什麼?

編輯:我使用SQLite的單元測試場景中,如果說有什麼區別。

回答

3

幽州

根據文檔,它應該運行的查詢檢索自動清空所有對象

但在https://www.hibernate.org/hib_docs/v3/api/org/hibernate/FlushMode.html的文檔,該文檔指出,之前刷新模式(重點是礦):

會話被有時沖洗查詢執行前的以 確保查詢永不返回陳舊的 狀態。這是默認的沖洗模式。

所以,是的,你需要做一個刷新以保存這些值,然後再期待它們出現在你的選擇中。