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 :)
嘿羅布斯, 我在單身人士範圍內使用它作爲定義我的DI容器。但是,我也嘗試了數據上下文和使用它們的存儲庫工廠的瞬態和請求範圍,並獲得了相同的結果。 可能最好我現在仔細檢查一下。 感謝您花時間回覆。 – nick 2010-08-07 07:22:31
嘿,我回去,意識到這實際上是我的測試,說對象已更新 - 而不是我的實際代碼。在我的測試中......我使用了相同的DataContext實例 - 正如你所說,它是數據緩存。 因此,我用_dataContext = new NTCodingDataContext();爲每個調用添加了前綴FindAll。我的測試變成了綠色。寶貝,你好! 對不起,我不能標記爲答案,因爲我的聲望很低,但我非常感謝你幫助我:) –
nick
2010-08-07 10:27:28