2012-02-02 49 views
0

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

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. 

回答

0

MergeOption对此没有影响。 MergeOption只是告诉EF如何处理物化实体 - NoTracking意味着上下文不得跟踪实体进行更改。您必须使用急切的加载。

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