我一直在尝试使用EntityFramework,在面对下面的错误之后,我尝试使用ThenInclude来解决它。
表达式' [x] .ModelA.ModelB'传递给Include运算符无法绑定
但是现在我似乎对它解决问题的原因缺乏了解
这有什么区别:
.Include(x => x.ModelA.ModelB)
而且:
.Include(x => x.ModelA).ThenInclude(x => x.ModelB)
答案 0 :(得分:2)
区别在于 Include 将引用您最初查询的表,而不管它放在链中的什么位置,而 IncludeThen 将引用包含的最后一个表。这意味着如果您只使用 Include,您将无法包含第二个表中的任何内容。
答案 1 :(得分:0)
“ Include”与对象列表配合使用很好,但是如果需要获取多级数据,则“ ThenInclude”是最合适的。让我用一个例子来解释它。假设我们有两个实体“组织”和“客户”,
public class Company
{
public string Name { get; set; }
public string Location { get; set; }
}
public class Client
{
public string Name { get; set; }
public string Domains { get; set; }
public List<string> CountriesOfOperation { get; set; }
}
现在,如果您只想要公司和该公司的整个客户列表,则可以使用“包含”,
using (var context = new YourContext())
{
var customers = context.Companies
.Include(c => c.Clients)
.ToList();
}
但是,如果要将公司和“ CountriesOfOperation”作为相关数据,则可以在包含如下所示的客户之后使用“ ThenInclude”
using (var context = new MyContext())
{
var customers = context.Companies
.Include(i => i.Clients)
.ThenInclude(a => a.CountriesOfOperation)
.ToList();
}