LINQ to SQL: установка для ObjectTrackingEnabled значения false прерывает отложенную загрузку дочерних объектов? - PullRequest
21 голосов
/ 16 октября 2008

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

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

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

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

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

1 Ответ

15 голосов
/ 16 октября 2008

По данным MSDN:

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...