Entity Framework 核心 - 我可以在子 属性 中直接查询 lists/objects 以避免多次重复 Include/ThenInclude 吗?

Entity Framework Core - Can I query lists/objects in child property directly avoiding multiple repeating Include/ThenInclude?

在我们的后端,我们有一个 LINQ 查询来检索给定购买的客户信息,类似于:

var serviceRequest = await _dbContext.Purchases
    .Include(p => p.Customer)
      .ThenInclude(c => c.Addresses)
    .Include(p => p.Customer)
      .ThenInclude(c => c.EmailAddresses)
    .Include(p => p.Customer)
      .ThenInclude(c => c.PhoneNumbers)

我们想重构它,避免重复

Include(p=>p.blablabla)

每当我们想要添加更多内容以进行检索时。所以我们的 objective 正在将这个原始的 LINQ 修改为

var serviceRequest = await _dbContext.Purchases
    .Include(p => p.Customer.Addresses)
    .Include(p => p.Customer.EmailAddresses)
    .Include(p => p.Customer.PhoneNumbers)

使用 SQL 分析器,我们观察到 EFCore 生成的查询是相同的并且明显的结果对象相似,所以我们的问题是:是否有使用的方法、最佳实践或理由多个 Include 和 ThenInclude 即使我们认为第二个选项更清晰和可读?预先加载(我们默认使用)是否有副作用?

你做对了一切。 ThenLoad 如果在 one-to-many Include.

之后是有用的

关于副作用:一切都应该有效,否则 EF Core 团队破坏了它;) 它被记录在案,例如这里:https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.entityframeworkqueryableextensions.include?view=efcore-3.1 但作为字符串 属性 路径,应该是相同的。