实体框架延迟加载子属性中的null属性

时间:2012-08-27 12:36:24

标签: linq entity-framework entity-framework-4

使用延迟加载的实体框架 - 在实体加载相关实体时有以下问题 是空的。

说我有两个员工和员工细节。假设在上述情况下,并非所有员工条目在employeedetails表中都有一个条目。 如果我想查找员工列表

(from e in objectcontext.employees                                  
                              select new EmployeeEntity
                              {
                                  EmpID= e.EmployeeID,
                                  FirstName = e.FirstName,
                                  Address = e.employeedetails.Address
                              }).ToList();

EmployeeEntity是我们填充结果的数据类。

如果返回列表中有一名员工,则上述代码会中断 表employeedetails中没有条目。 这是显而易见的,因为对于没有详细信息条目的客户,e.employeedetails将为null

重写上述查询的最佳方法是什么?

这样的事情会被接受吗?

(from e in objectcontext.employees                                  
                              select new EmployeeEntity
                              {
                                  EmpID= e.EmployeeID,
                                  FirstName = e.FirstName,
     Address = e.employeedetails  == null ? "" :    e.employeedetails.Address,
                              }).ToList();

我不清楚以上查询的效率 - 这个语句会在数据库级别进行空检查吗?

我是否应该做一个明确的包括

objectcontext.include("employeedetails")...

然后遍历结果以检查是否为空?

1 个答案:

答案 0 :(得分:1)

是的,此语句确实会在生成的SQL查询中执行空检查。最有可能的是,它只是NVLCOALESCE

这就是你应该这样做的方式。