Вам нужно создать один DbContext
для HTTP-запроса ... т.е. не использовать один и тот же DbContext для нескольких запросов.
C # Сборщик мусора автоматически удалит DbContext
, как только он выйдет из области видимости.так что вам не нужно помещать его в using
блок, но, сказав, что большинство людей используют using
блок, а MS, кажется, поощряет его :
Время жизни контекста начинается, когда создается экземпляр, и заканчивается, когда экземпляр удаляется или собирается.Используйте using, если вы хотите, чтобы все ресурсы, которыми управляет контекст, располагались в конце блока.Когда вы используете using, компилятор автоматически создает блок try / finally и вызывает dispose в блоке finally.
public void UseProducts()
{
using (var context = new ProductContext())
{
// Perform data access using the context
}
}
По поводу использования DbContext
в вашем контроллере ваш вопрос:о дизайне и на основе мнений ... если вы следуете принципам DDD, DbContext
переходит на уровень инфраструктуры, а ваши контроллеры принадлежат к уровням презентаций ... так что вы бы не использовали DbContext
непосредственно в контроллере с самого начала.
Если вы хотите использовать DbContext
внутри вашего контроллера, лучше внедрить его, чем инициализировать его в контроллере, инициализация DbContext
внутри контроллера нарушает SRP, потому что контроллер не заинтересован в инициализации DbContext
.