我有一个强类型视图,它接收一个用于渲染的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>
<%} %>
任何建议和指示表示赞赏。
答案 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为循环中的每个元素向数据库发出查询,因此这将是一个更加繁琐的解决方案。