【发布时间】:2014-05-03 15:01:32
【问题描述】:
EF6 中 EntityCollection.Load() 的等价物是什么?我目前正在阅读一本关于 EF4 的书,在其中一个示例中,它调用了 Load() 方法:
foreach (var contact in contacts)
{
contact.Addresses.Load();
Console.WriteLine(contact.Addresses.Count);
}
我正在使用 EF6 进行测试和查看互联网,这是我发现的有效方法:
foreach (var contact in contacts)
{
context.Entry(contact).Collection(c => c.Addresses).Load();
Console.WriteLine(contact.Addresses.Count());
}
但如果这是等价的,为什么与我使用 EF4 运行代码时的第一个代码相比如此慢(非常、非常慢)?两个代码都禁用了延迟加载。我知道可能有更好的编码方法可以使其加载速度更快,但我只是好奇为什么 EF6 的代码比 EF4 的代码慢得多(就此而言)。或者这不是 EF6 中的等效代码?
【问题讨论】:
-
您到底想达到什么目标?为什么需要.Load()?这似乎是一个非常人为的场景 - 很难给出建议。
-
我正在测试书中的代码示例。第一个代码块用于使用 Load() 方法(在 EF4 中工作)预先加载联系人地址。现在,我正在尝试在 EF6 中做同样的事情(使用 Load() 方法进行预加载),但是使用我使用的当前代码(第二个块),它可以工作但速度太慢。我想知道为什么,甚至是 EF6 中的 Load() 方法版本。
-
contact.Addresses.Load();在 EF6 中不起作用吗? -
我认为不是; IntelliSense 不会捡起它,而且地址是 EF6 的 ICollection 类型,而 EF4 的 EntityCollection
类型。
标签: c# .net entity-framework eager-loading