EF Core Include在多个子级集合上

本文关键字:集合 Core Include EF | 更新日期: 2023-09-27 18:14:29

考虑这个聚合根…

class Contact 
{
    ICollection<ContactAddress> Addresses { get; set; }
    ICollection<ContactItem> Items { get; set; }
    ICollection<ContactEvent> Events { get; set; }
}

class Person 
{
    Contact ContactDetails { get; set; }
}

我如何急切加载所有的集合与联系人?

I tried this…

Context
    .Set<Person>()
    .Include(o => o.ContactDetails)
    .ThenInclude(o => o.Addresses)
    .ThenInclude(????)
    . ...

我也试过这个…

Context
    .Set<Business>()
    .Include(o => o.ContactDetails.Addresses)
    .Include(o => o.ContactDetails.Events)
    .Include(o => o.ContactDetails.Items)

在一些相关的注意事项上,是否有可能表示应该作为聚合根的一部分返回的内容使用流畅配置?

EF Core Include在多个子级集合上

ThenInclude模式允许您指定从根到单个叶子的路径,因此为了指定到另一个叶子的路径,您需要使用Include方法从根重新启动进程,并对每个叶子重复此过程。

对于您的示例,它应该是这样的:

Context.Set<Person>()
    .Include(o => o.ContactDetails).ThenInclude(o => o.Addresses) // ContactDetails.Addresses 
    .Include(o => o.ContactDetails).ThenInclude(o => o.Items) // ContactDetails.Items
    .Include(o => o.ContactDetails).ThenInclude(o => o.Events) // ContactDetails.Events
    ...

参考:加载相关数据-包括多个级别