为什么这个被引用的实体对象为空?
问题描述:
我有一个强类型的视图,它的渲染接收到一个设计模型。我的设计类(实体)与设计师有多对一的关系(即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>
<%} %>
任何建议和指针赞赏。
答
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解决方案。
奇妙。去找一个工作得很好的选项。感谢那! – 2010-01-07 09:31:53
+1。另一种选择是投影到演示模型http://blogs.teamb.com/craigstuntz/2009/12/31/38500/ – 2010-01-07 14:38:24