В новом шаблоне 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
?
Это просто удобный способ создания объекта контекста, создаваемого при вызове одного из ваших методов действий. Вам нужен один экземпляр для каждого запроса, потому что вы хотите, чтобы все ваши объекты были привязаны к одному экземпляру контекста. Вы также хотите, чтобы срок жизни вашего контекста был временем жизни запроса.
Если бы вы использовали второй подход, то private ApplicationDbContext context = new ApplicationDbContext();
вы должны были бы поместить это в каждый контроллер. Вы можете создать какой-то базовый контроллер, который сделает то же самое и просто наследует ваш базовый контроллер.
Опять же, это просто метод удобства, используемый для демонстрации.
private ApplicationDbContext context = new ApplicationDbContext();
на уровне контроллера будет создавать экземпляр на каждый запрос? этот экземпляр будет удален после ответа сервера?