Должны ли контексты данных быть статическими?

Я использую Entity Framework 4 и создаю текст данных для модели в одном из базовых классов. Но я профилировал его, и контекст создается каждый раз, когда я пытаюсь запросить, поэтому я подумал о том, чтобы сделать его статическим, чтобы он создавался только один раз и всегда использовался повторно.

Как вы думаете, это лучший способ сделать это, и контекст данных / объекта всегда должен быть статическим? Есть ли недостатки в том, чтобы сделать его статичным? Должны ли контексты данных быть статическими или нестатическими? Любые идеи и предложения приветствуются.


person Vishal    schedule 02.11.2010    source источник
comment
Есть МНОГО вопросов по SO относительно времени жизни DataContext и ObjectContext. stackoverflow.com/search?q=Datacontext+lifetime   -  person Ian Mercer    schedule 02.11.2010
comment
возможный дубликат статического контекста данных LinqToSql в веб-приложении   -  person Ian Mercer    schedule 02.11.2010


Ответы (2)


Нет. Они не всегда должны быть статичными.

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

Я не буду вдаваться в подробное объяснение, поскольку есть несколько очень хороших сообщений в блогах, в которых подробно рассказывается:

Linq to SQL DataContext Lifetime Management - веб-журнал Рика Стрэла (может не показаться актуально, но все же)

Создание сущности Работа с Framework (v1), часть 1: DataContext Lifetime Management (как возможная альтернатива, если вам не нравится решение Рика)

person Justin Niessner    schedule 02.11.2010

Должны ли контексты данных всегда быть статическими?

Нет, они не должны (почти *) никогда не быть статичными. DataContext дешево создавать, потому что они предназначены для использования в качестве единицы работы. Таким образом, у вас должен быть один DataContext на «разговор» (что бы это ни значило для вашего контекста).

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

person jason    schedule 02.11.2010