递归应用MergeOption.NoTracking

时间:2012-02-02 17:48:41

标签: entity-framework

我想从实体框架中获取一个对象,并将其及其所有相关对象返回给用户。当我将MergeOption设置为MergeOption.NoTracking时,即使在实体/上下文对象被销毁之后,我也会获得第一个相关对象。但是当我尝试获取相关对象的相关对象时,我得到一个异常,说实体对象不再存在!我尝试在检索的所有实体上设置MergeOption,但这不起作用。知道如何解决这个问题?!这是我的代码:

MyFirstObject myObject;

using (var entities = new MyEntities())
{
    entities.MyFirstObject.MergeOption = MergeOption.NoTracking;
    entities.MySecondObject.MergeOption = MergeOption.NoTracking;
    entities.MyThirdObject.MergeOption = MergeOption.NoTracking;

    myObject = entities.MyFirstObject.First();
}


myObject1.MySecondObjects..... // Works fine.
myObject1.MySecondObjects.MyThirdObjects.... // Throw an exception.

1 个答案:

答案 0 :(得分:0)

MergeOption对此没有影响。 MergeOption只告诉EF如何处理物化实体 - NoTracking表示上下文不得跟踪实体的变化。您必须使用预先加载。

myObject = entities.MyFirstObject
                   .Include("MySecondObjects.MyThirdObjects")
                   .First();