Использование статической переменной DataContext - PullRequest
4 голосов
/ 24 апреля 2009

Я недавно унаследовал приложение ASP.Net с использованием Linq2SQL. В настоящее время у него есть свои объекты DataContext, объявленные как статические на каждой странице, и я создаю их в первый раз, когда нахожу, что они нулевые (singleton, вроде).

Мне нужны комментарии, если это хорошо или плохо. В ситуациях, когда мне нужно только читать из БД, и в ситуациях, когда мне нужно писать тоже.

Как насчет наличия только одного экземпляра DataContext для всего приложения?

Ответы [ 2 ]

6 голосов
/ 24 апреля 2009

Боюсь, один DataContext на приложение будет работать плохо. Для начала DataContext не является поточно-ориентированным, поэтому даже использование его в качестве статического элемента страницы - плохая идея. Как упомянул asgerhallas, идеально использовать контекст для единицы работы - обычно для одного запроса. Все остальное, и вы начнете обнаруживать, что все ваши данные находятся в памяти, и вы не увидите обновления без явного обновления. Вот пара сообщений, которые говорят на эти две темы: Идентификационные карты и Единицы работы

4 голосов
/ 24 апреля 2009

Я использую один DataContext на запрос, но это зависит от сценариев, с которыми вы сталкиваетесь. Я думаю, что смысл с L2S состоял в том, чтобы использовать его с шаблоном единицы работы, где у вас есть контекст на ... хорошо единицу работы. Но это не работает в больших приложениях, так как довольно сложно позже присоединить сущности к новому контексту.

Рик Страл действительно хорошо познакомился с этой темой здесь:

http://www.west -wind.com / блог / сообщений / 246222.aspx

Одна вещь, с которой я могу сказать, что у меня были проблемы в прошлом, это иметь один контекст для сценариев чтения и записи. Отслеживание изменений, выполняемое в текстовом тексте данных, является довольно трудоемким процессом, когда вы только что читаете, что большинство веб-приложений обычно делает большую часть времени. Вы можете сделать datacontext доступным только для чтения, и он немного ускорит процесс - но тогда вам понадобится другой контекст для записи.

...