实体框架 Join vs Include

3

我正在使用EF6.1,并且对编写联接查询的两种格式感到困惑。

var query = (from cc in dbContext.Companies.AsNoTracking()
             join dc in dbContext.Departments.AsNoTracking() 
             on cc.CompanyId equals dc.CompanyId
                select new {cc,dc}).ToList().Select(k=> New Company()
                              {
                                 CompanyId = k.cc.CompanyId,
                                 Departments = k.dc.ToList()
                              });

对比

var query = dbContext.Comapanies.Include(k=>k.Departments).ToList();

我的问题是应该使用哪个,并且有什么优缺点。
在使用多个表格的情况下,我发现对于使用Include的反馈意见不一。
根据以下文章: https://msdn.microsoft.com/en-in/data/jj574232.aspx “请注意,目前无法过滤加载哪些相关实体。Include将始终包含所有相关实体。”
这个陈述也不是很清楚。 请给出建议。
2个回答

2

请注意,目前无法过滤加载哪些相关实体。Include将始终存在于所有相关实体中。

这个声明的意思是,如果表在数据库中有适当的关系定义,那么'Inclues'将起作用,但是联接语句不需要在数据库中定义任何关系。

这是在决定使用包含还是连接时的关键点,顺便说一下,包含是更合适的选择,因为它们已经在数据库和实体中进行了管理。


如果数据库中的表关系已经正确定义,则使用INCLUDE,否则JOIN适用于两种情况。 - M.Aamir Niazi

0
如果你想在多个ID字段上连接实体,你必须使用第一个版本。 或者使用EF Core 5的Filter Include表达式(参见这个SO主题)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接