Контекст объекта Entity Framework для каждого запроса в ASP.NET?

Считается ли хорошей практикой использовать один ObjectContext для каждого запроса? Я читал, что эти объекты должны быть недолговечными и не очень дорогими для создания экземпляров, но делает ли это дело привлекательным для одного из них на запрос? Если да, есть ли шаблоны, которые правильно это реализуют?


person kfc    schedule 14.05.2013    source источник
comment
Краткий ответ: да. Подробнее (шаблоны...): это веб-формы или MVC?   -  person ken2k    schedule 14.05.2013


Ответы (1)


Да, это общепринятый подход к использованию ObjectContext/DbContext со временем жизни для каждого HttpRequest. Вот образец, который я предоставил в другом ответе.

Тем не менее, лучше оставить это управление жизненным циклом библиотеке IoC. Известные из них: Замок Виндзор, Autofac.

Обновление.
Чтобы избавиться от контекста, вы можете использовать метод Application_EndRequest в Global.asax. Следующий код не тестировался, но вы поняли идею:

protected virtual void Application_EndRequest()
{
    var key = "MyDb_" + HttpContext.Current.GetHashCode().ToString("x")
                      + Thread.CurrentContext.ContextID.ToString();
    var context = HttpContext.Current.Items[key] as MyDbContext;

    if (context != null)
    {
        context.Dispose();
    }
}
person Kamyar    schedule 14.05.2013
comment
Кажется немного сложным использовать IOC с веб-формами. Поскольку у меня небольшое приложение, я думаю, что выберу решение, предложенное в образце, на который вы указали. Итак, есть ли способ принудительно удалить объект контекста области запроса после завершения запроса? - person kfc; 15.05.2013
comment
@kfc обновил мой ответ. - person Kamyar; 15.05.2013