我正在研究一個小應用程序,它允許用戶創建一個單詞列表,並且用戶能夠爲該列表提供一個名稱。我設置程序以利用工作單元模式。我希望用戶能夠進行他們想要的所有CRUD更改,然後當用戶準備好更新數據庫時,單擊「保存更改」按鈕執行Context.SaveChanges()並進行所有更改。實體與EntityState.Added不返回在IRepository <T> .FindAll()
我正在使用實體框架和存儲庫&啓用了延遲加載的工作單元模式。列表和單詞類都是POCO映射到數據模型,該數據模型依次映射到數據庫。
我添加代碼:
_unitOfWork.ListRepository.Add(newList);
的ListRepository.Add方法:
public void Add(T newEntity)
{
_objectSet.AddObject(newEntity);
}
對我後來得到一個InvalidOperationException與消息:序列不包含任何元素。
_unitOfWork.ListRepository.Find(l => l.Name == currentName).Single();
我知道爲什麼我得到這個異常,因爲我應該使用SingleOrDefault()來保證安全。但是,我知道我正在尋找的實體存在於上下文中的某處。我的猜測是我沒有在正確的地方尋找。
這裏是擦(或我的知識缺乏):
在調試,我把一個斷點以上_unitOfWork.ListRepository.Add(newList)代碼。一步結束後,我去了即時窗口,做,得到如下:
?_unitOfWork.ListRepository.FindAll().Count();
1
的「1」,被認爲是一個「2」
的ListRepository.FindAll()方法:
public IQueryable<T> FindAll()
{
return _objectSet;
}
我追蹤了我的代碼,我只初始化了一次_unitOfWork對象。我露出ObjectSet.Context.ObjectStateManager在資源庫中,並且當異常助手調試上來,我可以到即時窗口,做:
_unitOfWork.ListRepository.GetObjectStateManager()
.GetObjectStateEntries(EntityState.Added).Count();
1
所以,我知道該實體是在那裏,但我不知道如何使用_unitOfWork或ListRepository對象來獲取它。任何援助將不勝感激,請指出正確的方向。
謝謝。
終於有一些時間來回到這個。謝謝你的回答,完美的工作!現在做一些研究來了解發生了什麼。 – blandau
@Ladislav:尊重!這些EF問題無處不在。驚人的你知道多少! – Learner