Вот статья на эту тему ...
Управление жизненным циклом данных Linq to SQL
Он рекомендует по одному на запрос, и я реализовал этот шаблон в нескольких приложениях, и он хорошо сработал для меня.
Он немного говорит об этом в этой статье ... Его быстрая и грязная версия ссылается на System.Web и делает что-то вроде этого:
private TDataContext _DataContext;
public TDataContext DataContext
{
get
{
if (_DataContext == null)
{
if (HttpContext.Current != null)
{
if (HttpContext.Current.Items[DataContextKey] == null)
{
HttpContext.Current.Items[DataContextKey] = new TDataContext();
}
_DataContext = (TDataContext)HttpContext.Current.Items[DataContextKey];
}
else
{
_DataContext = new TDataContext();
}
}
return _DataContext;
}
}
Но затем он рекомендует вам сделать следующий шаг и избавиться от ссылки на System.Web, использовать внедрение зависимостей и создать собственный IContainer, который мог бы определять срок службы вашего текстового контекста в зависимости от того, работает ли он в модульном тесте, в Интернете. приложение и т. д.
Пример:
public class YourRepository
{
public YourRepository(IContainer<DataContext> container)
{
}
}
затем замените HttpContext.Current.Items[DataContextKey]
на _Container[DataContextKey]
надеюсь, это поможет ...