Sla*_*uma 22 .net entity-framework entity-framework-4.1
鉴于以下模型......
public class Parent
{
public int Id { get; set; }
public ICollection<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public ICollection<Grandchild> Grandchildren { get; set; }
}
public class Grandchild
{
public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
...我们能渴望负载有Include一个Parent与所有Children和Grandchildren一步到位,像这样:
context.Parents.Include(p => p.Children.Select(c => c.Grandchildren))
Run Code Online (Sandbox Code Playgroud)
显式加载有类似的可能吗?
可以通过以下方式明确加载子集合:
Parent parent = context.Parents.Find(parentId);
context.Entry(parent).Collection(p => p.Children).Load();
Run Code Online (Sandbox Code Playgroud)
但试图以与Include... 类似的方式加载孩子
context.Entry(parent)
.Collection(p => p.Children.Select(c => c.Grandchildren)).Load();
Run Code Online (Sandbox Code Playgroud)
...不编译和字符串重载Collection...
context.Entry(parent).Collection("Children.Grandchildren").Load();
Run Code Online (Sandbox Code Playgroud)
...引发异常("......不允许虚线路径......").
我发现唯一有用的是明确加载Grandchildren循环:
Parent parent = context.Parents.Find(parentId);
context.Entry(parent).Collection(p => p.Children).Load();
foreach (var child in parent.Children)
context.Entry(child).Collection(c => c.GrandChildren).Load();
Run Code Online (Sandbox Code Playgroud)
我想知道我是否错过了什么,如果有其他方法明确加载GrandChildren一次往返.
感谢您的反馈!
Lad*_*nka 20
正如我在评论中指出的那样,您可以尝试先获取关系查询,然后添加包含并执行加载.就像是:
context.Entry(parent)
.Collection(p => p.Children)
.Query()
.Include(c => c.Grandchildren) // I'm not sure if you can include grandchild directly
.Load();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4184 次 |
| 最近记录: |