2012-02-02 46 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();