EF Core包含多个子级别集合

ser*_*0ne 7 c# entity-framework entity-framework-core

考虑这个聚合根......

class Contact 
{
    ICollection<ContactAddress> Addresses { get; set; }
    ICollection<ContactItem> Items { get; set; }
    ICollection<ContactEvent> Events { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

......我用过的......

class Person 
{
    Contact ContactDetails { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何通过联系人急切加载所有集合?

我试过这个......

Context
    .Set<Person>()
    .Include(o => o.ContactDetails)
    .ThenInclude(o => o.Addresses)
    .ThenInclude(????)
    . ...
Run Code Online (Sandbox Code Playgroud)

我也试过这个......

Context
    .Set<Business>()
    .Include(o => o.ContactDetails.Addresses)
    .Include(o => o.ContactDetails.Events)
    .Include(o => o.ContactDetails.Items)
Run Code Online (Sandbox Code Playgroud)

在某种程度上相关的说明,是否可以使用流畅的配置表达应该作为聚合根的一部分返回的内容?

Iva*_*oev 13

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
    ...
Run Code Online (Sandbox Code Playgroud)