实体框架 - 如何加载空子项

时间:2012-09-19 19:12:10

标签: entity-framework

我开始使用Entity Framework并遇到了问题。

假设我的数据库中有2个表。一个名为包含ID和密码的代理,另一个名为AgentDetail的表包含有关代理的更多信息。但是,每个代理记录可能没有相应的AgentDetail记录。

我有这两个类来代表这两个表:

public class Agent
{
    public string AgentId { get; set; }
    public string Password { get; set; }
    public virtual AgentDetail AgentDetail { get; set; }
}

public class AgentDetail
{
    public string AgentDetailId { get; set; }
    public string AgentName { get; set; }
    public string Postcode { get; set; }
}

使用EF我可以将数据添加到数据库中。当两个表中都有相应的记录时,我也可以检索数据。

        var agents = from a in context.Agents
                     select a;

        return View(agents.ToList());

但是,如果在AgentDetail表中不存在该记录,则在AgentDetail中呈现值时,我的视图中会出现NullReferenceException。

现在完全可以预料到,因为没有AgentDetail记录。

我的问题是,当表中不存在记录时,如何让EF创建一个空值的AgentDetail。

我可以在LINQ查询中添加一个空的子对象 - 类似于:

        var agents = (from a in rb.Agents
                      select new
                      {
                          AgentId = a.AgentId,
                          Password = a.Password,
                          AgentDetail = a.AgentDetail == null ? new AgentDetail() : a.AgentDetail,
                      }).ToList();

(但上面的内容不起作用,因为我收到以下消息:

无法在LINQ to Entities查询中构造实体或复杂类型“Models.AgentDetail”。)

1 个答案:

答案 0 :(得分:3)

你真的不希望人工添加一个'空'项,因为那时(没有一些向后弯曲),该对象将被尝试持久化到数据库。

最好的办法是拆分子数据的部分视图,然后在尝试从中读取值之前检查null