2010-08-07 38 views
1

當EF4使用通用版本庫時,我遇到了一些小問題。首先讓我告訴你,我用它來訪問對象的集合(這是在通用reposiroy代碼)的代碼:通用版本庫問題EF4代碼優先

public IEnumerable<T> FindAll<T>() where T : class 
    { 
     return ObjectContext.CreateObjectSet<T>(); 
    } 

下面是被調用類型圖書的倉庫這個代碼的例子

_returnedBooks = _dataContext.FindAll<Book>() 
      .Where(b => b.Title == _editedtitle && b.Description == _editedDescription && b.ImageUrl == _editedImageUrl); 

上面的代碼顯示我查詢一本書的數據上下文,該書的屬性與我以前用來編輯圖書的值(因此是_edited前綴)相匹配。但是一旦我編輯了這本書,我沒有在數據上下文中調用Save Changes。

即使我沒有保存更改,問題仍然存在,FindAll(在本例中爲book)會返回帶有編輯值的書籍。但是,當我檢查DbSet(需要註冊Code First使用的類)時,它不在該集合中。

所以,我還沒有設法追查任何這種行爲的文件,或者我是否自己和失蹤的明顯。

幫助meeeeeeeeeeeeeeeeeeeeeeeee :)

回答

1

是否使用相同的DataContext?無論您是否調用了SaveChanges(),DataContext都會緩存未提交的更改並在後續查詢中返回它們。如果您想避免檢索未提交的編輯,您需要新建一個新的或備用的上下文。

+0

嘿羅布斯, 我在單身人士範圍內使用它作爲定義我的DI容器。但是,我也嘗試了數據上下文和使用它們的存儲庫工廠的瞬態和請求範圍,並獲得了相同的結果。 可能最好我現在仔細檢查一下。 感謝您花時間回覆。 – nick 2010-08-07 07:22:31

+0

嘿,我回去,意識到這實際上是我的測試,說對象已更新 - 而不是我的實際代碼。在我的測試中......我使用了相同的DataContext實例 - 正如你所說,它是數據緩存。 因此,我用_dataContext = new NTCodingDataContext();爲每個調用添加了前綴FindAll 。我的測試變成了綠色。寶貝,你好! 對不起,我不能標記爲答案,因爲我的聲望很低,但我非常感謝你幫助我:) – nick 2010-08-07 10:27:28