2009-04-24 3 views
4

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

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

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

ответ

6

Один DataContext для приложения будет работать плохо, боюсь. DataContext не является потокобезопасным, для начинающих, поэтому даже использование одного из них как статического члена страницы - плохая идея. Как упоминалось в asgerhallas, идеально использовать контекст для единицы работы - обычно один запрос. Все остальное, и вы начнете находить все свои данные в памяти, и вы не увидите обновлений без явного обновления. Вот пара сообщений, которые говорят с этими двумя темами: Identity Maps и Units of Work

4

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

Рик Стрэхл имеет очень хорошее введение в тему здесь:

http://www.west-wind.com/weblog/posts/246222.aspx

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

Смежные вопросы