0

我有一個抽象的內容實體在我的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; 

誰能告訴我我做錯了什麼?我試圖按照我見過的車型發佈,顯然是錯過了一些東西......

謝謝!

+0

我沒有看到你在哪裏使用GetMultipleChoiceItems?您最後的代碼片段只需訪問內容而不使用「包含」。 – 2010-09-03 15:01:03

+0

我在上下文中使用它。在該代碼之前的代碼片段中加載。最後一個片段位於loadOperation完成時發生的事件處理程序中。 – 2010-09-03 15:54:20

回答

0

我必須手動完成元數據的元數據類型屬性(因爲RIA由於某種原因默認爲子類默認元數據)具有錯誤的類型。它無意中閱讀:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))] 

,應該有閱讀:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.MultipleChoiceMetadata))] 

沒有子類生成的元數據事實上是很煩人的。

無論如何,張貼在這裏萬一有其他人有這個問題!

相關問題