1

背景: 我正在使用 EF4 和ObjectContext. 为了优化复杂对象层次结构的检索,我手动执行数据库查询,然后使用ObjectContext.Translatey<T>(DataReader, entitySetName, mergeOptions.AppendOnly)将数据行转换为实体。然后我将实体附加到ObjectContextwithAttach方法。这也修复了实体之间的关系。

问题: 加载并设置完所有内容后,我尝试从父实体导航到子实体(例如 Parent.Childs.First()),但 EF 命中数据库以加载孩子,即使所有子实体都是已经存在于 ObjectContext 和 EntitySet 中。看起来原因是 parent.Childs.IsLoaded 设置为 false 这使 EF 认为它仍然需要加载关系。

问题: 如何告诉 EF EntitySet 已经加载?

是否有支持的方式设置RelatedEnd.IsLoaded为 true。我不想搞乱调用RelatedEnd.SetIsLoaded内部方法。

我在这里发现了一个 smilar 问题,但它与 DbContext 相关并且没有令人满意的答案;-)

马特拉

4

2 回答 2

1

看起来这是在此更改中实现的:http: //entityframework.codeplex.com/workitem/269

您现在可以遍历您的实体并告诉他们他们的子集合已经加载:

foreach (var entity in loadedEntities)
  context.Entry(entity).Collection(a => a.SomeChildCollection).IsLoaded = true;

SomeChildCollection这将防止在从 访问实体时加载它们entity

我不确定这出现在哪个版本的 EF 中,但我猜是 6.0.0。

于 2014-01-27T04:32:43.680 回答
0

解决这个问题的唯一方法是关闭延迟加载。您在 MSDN 上找到的问题询问DbContext但答案提到无法更改底层库中的值 - ObjectContext API(在您的情况下为 EF4)是底层库。即使在 .NET 4.5 (EF5) 中IsLoaded,公共 API 上的设置仍然不可用。

于 2013-02-18T19:30:51.517 回答