小编典典

实体框架 linq 查询 Include() 多个子实体

all

这可能是一个非常基本的问题,但是在编写跨越三个(或更多)级别的查询时,包含多个子实体的好方法是什么?

即我有 4 个表:CompanyEmployeeEmployee_Car``Employee_Country

公司与员工有 1:m 的关系。

Employee 与 Employee_Car 和 Employee_Country 都具有 1:m 关系。

如果我想编写一个返回所有 4 个表中的数据的查询,我目前正在编写:

Company company = context.Companies
                         .Include("Employee.Employee_Car")
                         .Include("Employee.Employee_Country")
                         .FirstOrDefault(c => c.Id == companyID);

必须有更优雅的方式!这是冗长的,并且会生成可怕的 SQL

我在 VS 2010 中使用 EF4


阅读 69

收藏
2022-07-08

共1个答案

小编典典

使用扩展方法。将
NameOfContext 替换为您的对象上下文的名称。

public static class Extensions{
   public static IQueryable<Company> CompleteCompanies(this NameOfContext context){
         return context.Companies
             .Include("Employee.Employee_Car")
             .Include("Employee.Employee_Country") ;
     }

     public static Company CompanyById(this NameOfContext context, int companyID){
         return context.Companies
             .Include("Employee.Employee_Car")
             .Include("Employee.Employee_Country")
             .FirstOrDefault(c => c.Id == companyID) ;
      }

}

然后你的代码变成

     Company company = 
          context.CompleteCompanies().FirstOrDefault(c => c.Id == companyID);

     //or if you want even more
     Company company = 
          context.CompanyById(companyID);
2022-07-08