Я пытаюсь получить DbContext из текущего контекста Owin, поэтому я могу использовать один контекст в своем приложении, однако я получаю исключение NullReferenceException.
Я могу получить доступ к UserManager и RoleManager:
private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
Они настроены так, как они появились по умолчанию в примере проекта Identity:
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
Но пытаясь получить контекст, чтобы использовать его напрямую:
ApplicationDbContext context = HttpContext.GetOwinContext().Get<ApplicationDbContext>();
Он всегда возвращает ноль на моем контроллере. Как я могу получить текущий DbContext из контекста Owin?
ИЗМЕНИТЬ:
Я создавал новый контекст для использования с моим общим репозиторием.
public AdminController()
{
AppContext = new ApplicationDbContext();
this.repoProyects = new GenericRepository<Proyect>(AppContext);
}
Но это создавало проблему с объектами, на которые ссылаются из нескольких контекстов, поэтому я пытаюсь получить текущий контекст Owin следующим образом:
public AdminController()
{
this.AppContext = HttpContext.GetOwinContext().Get<ApplicationDbContext>();
this.repoProyects = new GenericRepository<Proyect>(AppContext);
}
Отсюда HttpContext всегда равен нулю, поэтому я не знаю, как получить контекст, чтобы передать его моему классу.
HttpContext
внутри контроллера равно null, значит, что-то не так с конвейером MVC. - person trailmax   schedule 03.11.2014