这可能是一个非常基本的问题,但是在编写跨越三个(或更多)级别的查询时,包含多个子实体的好方法是什么?
即我有 4 个表:Company、Employee和Employee_Car``Employee_Country
Company
Employee
Employee_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
使用扩展方法。将 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);