Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架核心-我是否可以直接查询子属性中的列表/对象,以避免多次重复包含?_C#_Sql_.net Core_Entity Framework Core_Eager Loading - Fatal编程技术网

C# 实体框架核心-我是否可以直接查询子属性中的列表/对象,以避免多次重复包含?

C# 实体框架核心-我是否可以直接查询子属性中的列表/对象,以避免多次重复包含?,c#,sql,.net-core,entity-framework-core,eager-loading,C#,Sql,.net Core,Entity Framework Core,Eager Loading,在我们的后端,我们有一个LINQ查询来检索给定购买的客户信息,类似于: var serviceRequest = await _dbContext.Purchases .Include(p => p.Customer) .ThenInclude(c => c.Addresses) .Include(p => p.Customer) .ThenInclude(c => c.EmailAddresses) .Include(p

在我们的后端,我们有一个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)
每当我们想要添加更多的东西来检索时。所以我们的目标是将原始LINQ修改为

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

使用SQL探查器,我们观察到EFCore生成的查询是相同的,明显的结果对象是相似的,因此我们的问题是:是否有一种方法、最佳实践或理由使用多个包含,然后再包含,即使我们认为第二个选项更清晰易读?急切加载是否有副作用(我们默认使用)?

您做的一切都是对的。如果在一对多
Include
之后,则LOAD很有用

关于副作用:一切都应该起作用,否则英孚核心团队会破坏它;)
这里有文档记录,例如:但是作为字符串属性路径,应该是相同的。

Wow,感谢您的参考!我不知道为什么我以前没有看msft包含文档。通过探查器和EF输出,我们看到了类似的查询,但我们不确定这是否会对EF核心产生副作用。谢谢。@CarlosDraperGiggs,您应该知道,
Include
只是声明性扩展—要加载哪些相关实体。如果加载了实体-声明成功。