1

我开始使用实体框架并遇到了问题。

假设我的数据库中有 2 个表。一个名为 Agent 的表包含 ID 和密码,另一个名为 AgentDetail 的表包含有关 Agent 的更多信息。但是,每个代理记录可能没有对应的 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”。)

4

1 回答 1

3

你真的不想人为地添加一个“空”项目,因为那样(没有向后弯曲),该对象将被尝试持久化到数据库中。

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

于 2012-09-19T20:14:20.443 回答