Обработка контекста Entity-Framework

1

В новом шаблоне MVC-5 есть файл в папке App_Start именем Startup.Auth.cs который содержит эти строки (наряду с некоторыми другими данными):

// Configure the db context and user manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

Что делает a single instance per request? и в чем разница между вызовом ApplicationDbContext следующим образом:

var context = HttpContext.GetOwinContext().Get<ApplicationDbContext>();

и размещение этого объявления в качестве поля в Controller class:

public class HomeController : Controller
{
    private ApplicationDbContext context = new ApplicationDbContext();

Есть ли предпочтительный подход для обработки context? является singleton class предоставляющим context?

Теги:
entity-framework
asp.net-mvc-5
ef-code-first

1 ответ

1
Лучший ответ

Это просто удобный способ создания объекта контекста, создаваемого при вызове одного из ваших методов действий. Вам нужен один экземпляр для каждого запроса, потому что вы хотите, чтобы все ваши объекты были привязаны к одному экземпляру контекста. Вы также хотите, чтобы срок жизни вашего контекста был временем жизни запроса.

Если бы вы использовали второй подход, то private ApplicationDbContext context = new ApplicationDbContext(); вы должны были бы поместить это в каждый контроллер. Вы можете создать какой-то базовый контроллер, который сделает то же самое и просто наследует ваш базовый контроллер.

Опять же, это просто метод удобства, используемый для демонстрации.

  • 0
    Так что размещение private ApplicationDbContext context = new ApplicationDbContext(); на уровне контроллера будет создавать экземпляр на каждый запрос? этот экземпляр будет удален после ответа сервера?
  • 0
    Нет, вы должны написать метод dispose на вашем контроллере для удаления контекста. Это еще одна удобная вещь с другой техникой.
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню