1
產生的實體框架6不工作
我已經使用舊版本的實體框架很長一段時間的項目,但我需要更新數據庫模式(使用數據庫第一次),因此Visual當我更改EDMX文件時,Studio 2013決定將我升級到EF 5(我現在已升級到EF 6)。延遲加載從EDMX
在我之前使用它的實體框架中,延遲加載看起來並不奏效,但我可以在集合或對象上調用.Load(),然後從數據庫加載它。
例如,這將在老EF工作:
public ICollection<CategoryItem> LoadedCategoryItems
{
get
{
CategoryItems.Load();
return CategoryItems;
}
}
在EF 5/6,CategoryItems將有計數爲0,所以延遲加載從未似乎工作:
public ICollection<CategoryItem> LoadedCategoryItems
{
get
{
return CategoryItems;
}
}
這似乎沒有辦法強制加載除了做這樣的事情:
database.CategoryItems.Load();
它可以通過預加載它不知怎麼的,但我有很多在我的數據庫中的許多關係,我無法弄清楚如何以這種方式預加載,所以現在我非常卡住,無法再往前走。
至於類的代碼通過由EDMX文件創建的T4模板生成,這是絕對虛擬:
public virtual HashSet<CategoryItem> CategoryItems { get; set; }
包含該對象的類是一個動態代理,和遲緩裝載上。
所以我不清楚爲什麼延遲加載不工作或如何調試它,找出爲什麼它是不是?
我怎麼能弄清楚到底是怎麼回事?
謝謝, 斯蒂芬
爲什麼你認爲延遲加載不起作用?你在哪裏訪問CategoryItems? (LazyLoading意味着它會在你使用它的時候加載數據 - 因此對於需要加載的CategoryItems,你需要調用它的獲取 - 你是否在訪問它,而不是顯示這部分代碼) –
當我嘗試訪問它時,在for循環中說,列表中沒有項目。 另一個示例是: public Image LoadedImage { get { return Image; } } 下面是由EDMX生成的代碼: public virtual Image Image {private get;組; } 當試圖訪問圖像(即:使用get),它崩潰,因爲它是空的。 但是,如果初始化應用程序時,我這樣做: database.Images.Load(); 它的工作原理,這意味着延遲加載不起作用。 – Stefan
你做錯了什麼,我沒有問題與EF 6中的LazyLoading,當我不要忽略要設置爲惰性加載工作,我希望你有他們設置的要求。 http://msdn.microsoft。com/en-us/library/vstudio/dd468057(v = vs.100).aspx特別是您可以檢查點「ProxyCreationEnabled選項必須設置爲true」。 –