背景: 我正在使用EF4和ObjectContext
。为了优化复杂对象层次结构的检索,我手动执行数据库查询,然后使用ObjectContext.Translatey<T>(DataReader, entitySetName, mergeOptions.AppendOnly)
将数据行转换为实体。然后我使用Attach
方法将实体附加到ObjectContext
。这也修复了实体之间的关系。如何防止在EntityFramework中导航属性时已经手动加载的实体的延迟加载
问题: 后,一切都被加载并建立我试着从父实体导航到子实体(例如Parent.Childs.First()),但EF访问数据库加载的孩子,即使所有的子实体已经存在于ObjectContext和EntitySet中。它看起来像这样的原因是parent.Childs.IsLoaded被设置为false,这使EF认为它仍然需要加载关系。
问题: 如何判断EF EntitySet是否已被加载?
是否有支持的方法将RelatedEnd.IsLoaded
设置为true。我不喜欢调用内部方法RelatedEnd.SetIsLoaded
。
我发现了一个问题,smilar但here它涉及到的DbContext,没有satifying答案;-)
马特拉
我想你应该在加载层次结构后处理你的上下文。 – 2013-02-18 15:47:06
Gert,谢谢,但我需要实体成为ObjectContext的一部分,因为我要对它们进行更改,并且稍后要调用ObjectContext.SaveChanges。 顺便说一句:如果我用MergeOption.NoTracaking翻译对象不会发生延迟加载(因为实体不与ObjectCOntext相关联),但在这种情况下,我也松散跟踪的变化。 – matra 2013-02-18 17:40:52
但你会解决延迟加载问题。您可以通过将对象临时附加到上下文来保存更改。环境应该有一个短暂的寿命。 – 2013-02-18 18:31:59