我开始使用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”。)
答案 0 :(得分:3)
你真的不希望人工添加一个'空'项,因为那时(没有一些向后弯曲),该对象将被尝试持久化到数据库。
最好的办法是拆分子数据的部分视图,然后在尝试从中读取值之前检查null
。