То, что вы ищете, это шаблон под названием «Сеанс / Контекст для запроса». Самый популярный и перекрестный ORM, перекрестный WebForms / MVC способ сделать это - в начале запроса создать новый контекст, запустить сеанс и, наконец, в конце вытащить его и удалить
От: http://blogs.microsoft.co.il/blogs/gilf/archive/2010/05/18/how-to-manage-objectcontext-per-request-in-asp-net.aspx
public static class ContextHelper<T> where T : ObjectContext, new()
{
#region Consts
private const string ObjectContextKey = "ObjectContext";
#endregion
#region Methods
public static T GetCurrentContext()
{
HttpContext httpContext = HttpContext.Current;
if (httpContext != null)
{
string contextTypeKey = ObjectContextKey + typeof(T).Name;
if (httpContext.Items[contextTypeKey] == null)
{
httpContext.Items.Add(contextTypeKey, new T());
}
return httpContext.Items[contextTypeKey] as T;
}
throw new ApplicationException("There is no Http Context available");
}
#endregion
}
Вы также можете возиться с новым () вызовом DataContext в конструкторе контроллера, как показано здесь:
http://www.stephenwalther.com/blog/archive/2008/08/20/asp-net-mvc-tip-34-dispose-of-your-datacontext-or-don-t.aspx
Теперь в этой статье говорится, что вам не нужно беспокоиться об избавлении от контекста, но я не согласен. С современными ORM вы действительно хотите воспользоваться «сеансами», такими как способы отслеживания и сохранения изменений. Без ручного удаления вашего контекста все виды плохого кода или ужасных шаблонов рабочих единиц не будут генерировать исключения, как они должны. ИМХО сессионный аспект ORM является наиболее важной частью. Игнорировать на свой страх и риск.
Если вы используете SQL Server, функция пула подключений сводит на нет значительное влияние на производительность при открытии и закрытии подключения. Если вы не начнете делать 100 000 запросов в секунду, я бы об этом не беспокоился.