2010-01-07 59 views
1

我有一個強類型的視圖,它的渲染接收到一個設計模型。我的設計類(實體)與設計師有多對一的關係(即1設計師可以有一個或多個設計)。爲什麼這個被引用的實體對象爲空?

當試圖使用下面的代碼時,我得到了Design.Designer關係的NullReferenceException。很明顯,我做錯了什麼,但對實體框架相當缺乏經驗,我需要關於實際框架的指導。

<% foreach (var Design in Model) 
    { %> 
<figure> 
    <a href="View/<%= Design.ID %>" rel="Next" title="View this design"> 
     <img id="design-<%= Design.ID %>" 
      src="/Templates/<%= Design.ID %>/preview.png" 
      height="200" 
      width="200" 
      alt="<%= Design.Title %> by <%= Design.Designer.DisplayName %>" 
      title="<%= Design.Title %> by <%= Design.Designer.DisplayName %>" /> 
    </a> 
</figure> 
<%} %> 

任何建議和指針讚賞。

回答

2

Designer屬性是一個所謂的導航屬性,這些默認情況下不加載,這就是爲什麼你會得到一個NullReferenceException。

您至少有兩種選擇:

包括查詢

當你查詢你的ObjectContext,明確定義你的查詢應包括設計導航屬性。這可能看起來有點像這樣:

var q = from d in myObjectContext.Designs.Include("Designer") 
     select d; 

引用它

你也可以明確地引用它之前加載導航屬性之前顯式加載屬性。這將是這樣的:

foreach(var design in Model) 
{ 
    design.DesignerReference.Load(); 
    // the rest of the code 
} 

然而,這將導致EF發出查詢該數據庫,用於循環中的每個元素,所以這將是一個更chattier解決方案。

+0

奇妙。去找一個工作得很好的選項。感謝那! – 2010-01-07 09:31:53

+1

+1。另一種選擇是投影到演示模型http://blogs.teamb.com/craigstuntz/2009/12/31/38500/ – 2010-01-07 14:38:24

相關問題