LINQ to SQL: установка ObjectTrackingEnabled на false прерывает ленивую загрузку дочерних сущностей?

Есть ли способ отключить функции отслеживания объектов LINQ, не отключая также ленивые дочерние ассоциации?

Я использую LINQ2SQL в наборе интеграционных тестов. Я использую LINQ только для проверки изменений в базе данных, поэтому хочу, чтобы он действовал как простой уровень доступа к данным, а не как полная ORM. Для этого я установил для свойства ObjectTrackingEnabled контекста данных значение false, чтобы LINQ не кэшировал данные. Это работает нормально, за исключением того, что нарушает связи между сущностями.

Например, предположим, что две таблицы WIDGET и CATEGORY с отношением FK между ними. При включенном отслеживании объектов widgetInstance.CATEGORY правильно загружается с отложенной загрузкой. Если отслеживание объектов отключено, ничего не загружается лениво, а свойство CATEGORY всегда имеет значение null.

Как предотвратить кэширование данных LINQ, не предотвращая при этом ленивую загрузку?

ОБНОВЛЕНИЕ: Вот a ссылка на страницу MSDN, на которую есть ссылка в ответе. Дальнейшие исследования также показали, что я могу использовать LoadWith делать нетерпеливую загрузку дочерних данных. В моем случае мне просто нужны данные, поэтому нетерпеливая загрузка - это нормально.


person Seth Petry-Johnson    schedule 15.10.2008    source источник


Ответы (1)


Согласно MSDN:

Отложенная загрузка требует отслеживания объекта. Действительны только следующие три режима:

ObjectTrackingEnabled = false. DeferredLoadingEnabled игнорируется и считается ложным. Такое поведение соответствует контексту данных, доступному только для чтения.

ObjectTrackingEnabled = true. DeferredLoadingEnabled = false. Эта ситуация соответствует DataContext, который позволяет пользователям загружать граф объекта с помощью директив LoadWith, но не включает отложенную загрузку.

Оба имеют значение true. Это значение по умолчанию.

Вам нужно либо включить отслеживание объектов и отсоединить объекты (что вполне выполнимо, поскольку вы запускаете тесты, я думаю, в противном случае было бы довольно сложно отсоединить каждый отдельный объект другого объекта ...), либо использовать DataLoadOptions.LoadWith () или AssociateWith (), чтобы загрузить отношения.

person liggett78    schedule 15.10.2008