我想從當前的Owin上下文中獲取DbContext,所以我可以在我的應用程序中使用單個上下文,但是,我收到了NullReferenceException。如何獲得ASP.Net標識的OWIN上下文?
我可以訪問的UserManager和RoleManager:
private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
他們配置是怎麼產生的默認的身份樣本項目:
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>();
它總是在我的控制器上返回null。我如何從Owin上下文獲取當前的DbContext?
編輯:
我創建一個新的上下文與我的通用倉庫
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從這裏始終爲空,所以我不知道如何g並將上下文傳遞給我的課程。
在應用程序上下文的構造函數中放置一個斷點,其思想是確保上下文在第一次解析後不會處理。這可能會導致上下文在第二次嘗試解析時爲空。 – 2014-11-02 01:46:58
您是自己創建控制器還是讓框架處理控制器創建?如果控制器中的「HttpContext」爲空,那麼MVC流水線就會出現問題。 – trailmax 2014-11-02 21:17:38
框架正在處理控制器創建,我不明白爲什麼,但我認爲HttpPContext沒有準備好在控制器的構造函數內使用 – 2014-11-02 21:34:18