Должны ли контексты данных быть статичными? - PullRequest
8 голосов
/ 02 ноября 2010

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

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

Ответы [ 2 ]

9 голосов
/ 02 ноября 2010

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

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

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

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

Как заставить работать Entity Framework (v1), часть 1: DataContext Lifetime Management (для возможной альтернативы, если вы этого не сделаетекак решение Рика)

5 голосов
/ 02 ноября 2010

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

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

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

...