我有一個抽象的內容實體在我的EF4模型中具有一個具體的子類MultipleChoiceItem。在MultipleChoiceItem的情況下有一個相關的表,由名爲Options的MultipleChoiceItem實體的Navigation屬性訪問。我想急於加載選項結果,因爲如果你得到一個MultipleChoiceItem,你總是需要選項。但是,我似乎無法得到這個工作。這是我已經完成的基礎:無法獲得EF4急切加載子類實體的工作
MultipleChoiceItem是一個子類,因此它沒有獲取默認情況下創建的元數據。所以,我創建了一個元數據類爲它看起來有點像這樣:
[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))] public partial class MultipleChoiceItem { internal sealed class MultipleChoiceItemMetadata { ... other stuff ... [Include] public EntityCollection<McOption> Options { get; set; } ... other stuff ... }
然後我創造了contentService的一個新的查詢,看起來像這樣:
public IQueryable<Content> GetMultipleChoiceItems() { return this.ObjectContext.Contents.OfType<MultipleChoiceItem>() .Include("Options"); }
在單元測試,我打電話是這樣的:
context = new ContentContext();
var loadOperation = context.Load(context.GetMultipleChoiceItemsQuery());
loadOperation.Completed += new EventHandler(CompletedHandler);
一旦我進入CompletedHandler,下面的代碼不會eem加載Options屬性 - 事實上,Options.Count == 0應該是4(通過檢查底層數據存儲來驗證)。
MultipleChoiceItem mci = context.Contents.First(c => c.ContentId == mciId) as MultipleChoiceItem;
誰能告訴我我做錯了什麼?我試圖按照我見過的車型發佈,顯然是錯過了一些東西......
謝謝!
我沒有看到你在哪裏使用GetMultipleChoiceItems?您最後的代碼片段只需訪問內容而不使用「包含」。 – 2010-09-03 15:01:03
我在上下文中使用它。在該代碼之前的代碼片段中加載。最後一個片段位於loadOperation完成時發生的事件處理程序中。 – 2010-09-03 15:54:20