Отношение LINQ DeferredLoadingEnabled & DataLoadOptions - PullRequest
2 голосов
/ 21 мая 2009

У меня был блокпост, который каскадно опустился до ситуации, описанной ниже. Я не очень помог людям, отвечающим на мои предыдущие вопросы (я думаю, что мне нужно научиться лучше их формулировать), но я надеюсь, что кто-то хотя бы сможет объяснить мне это (я новичок в LINQ и не имел возможность еще читать в любой большой длине).

Я использую модель репозитория для доступа к данным через LINQ-to-SQL. Я пытаюсь использовать 1 контекст данных, объявленный как общедоступный статический, поэтому я всегда использую один и тот же контекст.

Проблема 1: веб-страницы загружались с кэшированными значениями сразу после сохранения изменений. Изменения были переданы в базу данных, но текст данных выплевывал кэшированную копию объекта.

Обходной путь : установите ObjectTrackingEnabled = false в текстовом данных.

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

Обходной путь: Установить DeferredLoadingEnabled = false для текста данных.

Проблема 3: LINQ не устанавливает автоматическую загрузку для всех объектов, связанных с данным объектом.

Обходной путь: Явно сконфигурируйте LoadOptions для текста данных и вручную идентифицируйте каждый связанный объект, установив LoadWith<Object>(o => o.entity1), LoadWith<Object>(o => o.entity2), ..., LoadWith<Object>(o => o.entityN).

Может ли кто-нибудь помочь мне преодолеть проблему с кэшированием, не имея дело с остальными?

Если нет, может кто-нибудь сказать мне, есть ли другой способ установить ImmediateLoadingEnabled (или что-то в этом роде) в контексте данных, чтобы мне не приходилось явно указывать параметры загрузки для всех сущностей связано с всеми объектами в моем домене?

Буду очень признателен за отзыв. Если я задаю вопросы без достаточного количества информации или если вы хотите привести пример, пожалуйста, дайте мне знать!

Заранее спасибо!

1 Ответ

1 голос
/ 21 мая 2009

Нельзя использовать один контекст для веб-приложения, поскольку веб-приложение является многопоточным (например, 1 поток на запрос), и это будет означать, что несколько потоков используют один и тот же контекст. И.о .: вы должны использовать систему, в которой для каждого запроса данных вы создаете новый контекст и используете его для выполнения запроса, а затем располагаете контекстом.

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