Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 使用Include和Include_C#_Entity Framework_Entity Framework Core - Fatal编程技术网

C# 使用Include和Include

C# 使用Include和Include,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我一直在尝试EntityFramework,在遇到下面的错误后,我尝试使用ThenInclude来解决它 无法绑定传递给Include运算符的表达式“[x].ModelA.ModelB” 但现在我似乎对它为什么能解决这个问题缺乏一些理解 这两者的区别是什么: .Include(x => x.ModelA.ModelB) 这是: .Include(x => x.ModelA).ThenInclude(x => x.ModelB) “包含”可以很好地处理对象列表,但是如果需要获

我一直在尝试EntityFramework,在遇到下面的错误后,我尝试使用ThenInclude来解决它

无法绑定传递给Include运算符的表达式“[x].ModelA.ModelB”

但现在我似乎对它为什么能解决这个问题缺乏一些理解

这两者的区别是什么:

.Include(x => x.ModelA.ModelB)
这是:

.Include(x => x.ModelA).ThenInclude(x => x.ModelB)
“包含”可以很好地处理对象列表,但是如果需要获取多级数据,那么“包含”是最合适的。让我举个例子来解释一下。假设我们有两个实体,公司和客户:

public class Company
{
    public string Name { get; set; }

    public string Location { get; set; }

    public List<Client> Clients {get;set;}
}

 public class Client
 {
    public string Name { get; set; }

    public string Domains { get; set; }

    public List<string> CountriesOfOperation { get; set; }
 }
但是,如果你想让一家公司以“CountriesOfOperation”作为相关数据,那么你可以在包括客户后使用“ThenClude”,如下所示:

using (var context = new MyContext())
{
   var customers = context.Companies
    .Include(i => i.Clients)
      .ThenInclude(a => a.CountriesOfOperation)
    .ToList();
}

区别在于,Include将引用您最初查询的表,而不管它在链中的位置如何,而IncludeThen将引用包含的最后一个表。这意味着,如果只使用include,您将无法包含第二个表中的任何内容。

有一个字符串版本允许您传递
“ModelA.ModelB”
。include(x=>x.ModelA.ModelB)
在EF6中工作,但在EF Core中不工作。在EF-Core中,你必须使用“thenclude”。@rawingdev:我很好奇EF-Core上这种行为背后的原因,有没有文章对此进行解释?我找不到任何人。在这种情况下没有区别。您使用的是什么EF核心版本?因为两者都在最新的EFC2.0中工作。2@IvanStoev我使用的是EFC1.1.1
using (var context = new MyContext())
{
   var customers = context.Companies
    .Include(i => i.Clients)
      .ThenInclude(a => a.CountriesOfOperation)
    .ToList();
}