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