尝试访问相关实体时,延迟加载不起作用

时间:2014-02-19 12:16:37

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

这是微软的实体MyEntity的动作细节的脚手架代码:

public async Task<ActionResult> Details(Guid? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    MyEntity myEntity = await db.MyEntities.FindAsync(id);
    if (myEntity == null)
    {
        return HttpNotFound();
    }
    return View(myEntity);
}

现在假设我想在details.cshtml中显示该实体所有者的名称,如果我编写以下代码:

<dt>
    Owner
</dt>
<dd>
    @Html.DisplayFor(m => m.User.FullName)
</dd>

即使尝试访问null以触发延迟加载,用户也会显示为Model.User

修改:按要求添加模型

public class MyEntity
{
    public Guid? Id { get; set; }
    public string Name { get; set; }
    public ApplicationUser User { get; set; }
}

2 个答案:

答案 0 :(得分:1)

将.Include(“User”)添加到您的linq查询。

答案 1 :(得分:0)

我遇到了同样的问题,马特的回答让我走上了类似的道路。我以为我会分享我发现的东西。

This article表示延迟加载与Async模式不太匹配。很高兴知道。

有了这个,我调查了eager loading。我在那里找到了答案。

MyEntity myEntity = await db.MyEntities.Where(m => m.Id == id)
                                       .Include(m => m.User)
                                       .FirstOrDefaultAsync();

希望能帮到别人!