【问题标题】:MVC3, Razor and EF5: Child properties not displayedMVC3、Razor 和 EF5:不显示子属性
【发布时间】:2013-03-08 18:12:31
【问题描述】:

好的,所以我有一个 Course 实体,它与 Industry 实体具有多对一或零关系。这意味着,出于分类目的,课程可以指定或不指定行业。我通过 EF 创建了所有实体和模型,因此存储在 Course 实体中的唯一链接是 IndustryId。

在创建控制器时创建的默认视图显示 IndustryId。

我现在要做的是显示描述,这是行业实体的属性。这是我的代码:

@foreach (var item in Model)
{
    <tr>
        <td><a href="@Url.Action("Details","Course", new { id=item.Id })"><img class="media-object" data-src="holder.js/64x64" /></a></td>
        <td>@Html.DisplayFor(modelItem => item.Name)</td>
        <td>@Html.DisplayFor(modelItem => item.Description)</td>
        <td>@Html.DisplayFor(modelItem => item.Industry.Description)</td>
        <td>@Html.DisplayFor(modelItem => item.Author)</td>
        <td>
            <a href="@Url.Action("Edit","Course", new { id=item.Id })"><i class="icon-edit"></i> Modify</a>
            <a href="@Url.Action("Delete","Course", new { id=item.Id })"><i class="icon-trash"></i> Delete</a>
        </td>
    </tr>
}

现在的问题是 @Html.DisplayFor(modelItem => item.Industry.Description 行没有显示任何内容。有人知道为什么吗?

【问题讨论】:

  • 是否开启延迟加载并设置实体以便延迟加载工作(即类型未密封且导航属性为虚拟?)

标签: c# asp.net-mvc entity-framework razor entity


【解决方案1】:

最可能的原因是您的查询中没有填充 Industry 对象,因此为空。您可能需要将 Include("Industry") 添加到模型或控制器中填充的 LINQ 查询中,以预先加载该相关实体。

【讨论】:

  • @Dave,虽然我自己会使用 Include 的类型安全变体。
  • @KirkWoll 如果您使用的是 LinqToSql,则可以使用类型安全的变体,但是 LinqToEntities 不支持该变体,而是将 Include 与字符串变量一起使用。
  • @Silvermind,它不会抛出空指针,因为 DisplayFor 使用表达式树。此外,实体框架确实支持type-safe Include,而 L2S 甚至没有这个概念。
  • @KirkWoll 你是对的,正确的,所以 +1。不知道他们在 EF5 中添加了对类型安全 Iclude 的支持。顺便说一句,L2S 通过DataLoadOptions 支持它
  • @Silvermind,L2S 支持 concept(通过 DataLoadOptions.LoadWith),但它以完全不同的方式完成,因为它不是在查询中组成本身。
猜你喜欢
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
相关资源
最近更新 更多