1

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

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

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

EmployeeEntity 是我们将结果填充到其中的数据类。

如果即使返回列表中的一名员工在表employeedetails 中没有条目,上述代码也会中断。这很明显,因为对于那些没有详细信息条目的客户,e.employeedetails 将为空

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

这样的事情可以接受吗?

(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")...

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

4

1 回答 1

1

是的,该语句确实会在生成的 SQL 查询中执行空检查。最有可能的是,它只是一个NVLor COALESCE

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

于 2012-08-27T12:52:00.767 回答