2010-01-07 124 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

相关问题