我正在使用實體框架4與MVC,並需要確保任何引用的實體我想在我的視圖中使用已加載控制器方法返回之前,否則視圖吐出恐懼:實體框架 - 急切加載相關實體
ObjectContext實例已被處置,不能再用於需要連接的操作。
當從上下文直選擇,我可以只使用Include(string)
方法迫使其被包括在生成的SQL查詢:
var sellers = context.Sellers.Include("Recommendations.User").ToList();
但是,如果我有(例如)一個輔助方法接受一個實體並需要加載所有項目,沒有可用的方法Include
。
void Test(Seller seller)
{
// ensure all recommendations and their users are loaded
}
蠻力方法是遍歷它們:
foreach (var recommendation in seller.Recommendations)
recommendation.User.ToString(); // just force a load
如果我有100項建議,這將創造幕後的101個SQL查詢。理想情況下,我需要一種方法/方法,只需一次訪問SQL即可加載所有的Recommendation
和User
對象。
讓我看看錢。
編輯我並不是真的有興趣討論這是一個好還是壞的架構。爲了這個問題,我簡化了我的場景。你可以用EF API來做什麼嗎?
EDIT 2
Ladislav's edit的新方法帶來了希望,但似乎我不太有。
我可以實現我通過該想什麼:
context.Sellers.Include("Recommendations.User").Single(s => s.Id == seller.Id);
這種方法不使用LoadProperty
工作...
context.LoadProperty(seller, "Recommendations.User");
...因爲它失敗,出現錯誤...
無法找到指定的導航屬性Recommendations.User。
如果您沒有對上下文的引用,則這兩種方法都不起作用。
雖然這不能回答你的問題(因此我把它作爲評論發佈) - 它確實討論了加載相關實體,因爲它目前在EF6中工作。這也是搜索「實體框架負載相關實體」時在Google中出現的第一個SOF鏈接:http://msdn.microsoft.com/en-us/data/jj574232。所以我想我會分享.. – 2014-05-30 14:12:38