为什么这个引用的实体对象为null?

时间:2010-01-07 09:17:23

标签: asp.net-mvc entity-framework

我有一个强类型视图,它接收一个用于渲染的Design模型。 My Design类(Entity)与Designer具有多对一关系(即1个Designer可以有1个或多个Designs)。

尝试使用以下代码时,我得到了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>
<%} %>

任何建议和指示表示赞赏。

1 个答案:

答案 0 :(得分:2)

Designer属性是一个所谓的导航属性,默认情况下不加载这些属性,这就是你得到NullReferenceException的原因。

您至少有两个选择:

包含在查询中

查询ObjectContext时,显式定义查询应包含Designer导航属性。这可能看起来像这样:

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为循环中的每个元素向数据库发出查询,因此这将是一个更加繁琐的解决方案。