Рекурсивное применение MergeOption.NoTracking - PullRequest
0 голосов
/ 02 февраля 2012

Я хочу получить объект из структуры сущностей и вернуть его вместе со всеми связанными объектами пользователю. Когда я устанавливаю 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 голосов
/ 02 февраля 2012

MergeOption не влияет на это. MergeOption просто говорит EF, как обрабатывать материализованные сущности - NoTracking означает, что контекст не должен отслеживать сущности для изменений. Вы должны использовать нетерпеливую загрузку.

myObject = entities.MyFirstObject
                   .Include("MySecondObjects.MyThirdObjects")
                   .First();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...