EntityFramework包含(Eager Load)虚拟属性的虚拟属性

Ash*_*ani 7 c# asp.net asp.net-mvc entity-framework

想象一下,我们有三个Dbset如下:

Category
{
...
   public virtual ICollection<Item> Items {get; set;}
...
}

Item
{
...
   public virtual ICollection<Specification> Specifications{get; set;}
...
}

Specification
{
...
}
Run Code Online (Sandbox Code Playgroud)

对于急切加载,我使用它像这样:

Category cat = db.Categories.Include(c=> c.Items).FirstOrDefault(c=> c.Id == 1);
Run Code Online (Sandbox Code Playgroud)

但现在的问题是

cat.Items[0].Specificationsnull,我们怎样才能让它急切加载集合的子集合呢?

PS:我尝试删除virtual关键字进行测试(我不想删除它),但它也没有用.

Mar*_*ner 9

您也可以使用表示法

db.Categories.Include("Items.Specifications")
Run Code Online (Sandbox Code Playgroud)

请注意,它必须是一个字符串


Mar*_*rha 8

 Category cat = db.Categories
        .Include(c => c.Items.Select(s => s.Specifications))
        .FirstOrDefault(c => c.Id == 1);
Run Code Online (Sandbox Code Playgroud)