asp.net-mvc - 如何在 ASP.Net Identity 上获取 OWIN 上下文?

标签 asp.net-mvc entity-framework asp.net-identity-2

我正在尝试从当前的 Owin 上下文中获取 DbContext,因此我可以在我的应用程序上使用单个上下文,但是,我收到了 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>();

它总是在我的 Controller 上返回 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 从这里开始始终为空,所以我不知道如何获取上下文以将其传递给我的类。

最佳答案

当我向 ApplicationUser 添加一些额外的导航属性时,我在使用 Identity Framework 时遇到了同样的问题。如果你设置

appContext = HttpContext.Current.GetOwinContext().Get<ApplicationDbContext>();

在 OnActionExecuting 而不是在构造函数中,那么 OWIN 应该准备好返回此时正在使用的 DbContext。 OnActionExecuting 在任何操作方法触发之前启动,因此这应该足够早以供使用。希望有帮助。

关于asp.net-mvc - 如何在 ASP.Net Identity 上获取 OWIN 上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26695113/

相关文章:

jquery - 如何构建 Web 应用程序以使 AJAX 和 DHTML 更容易?

c# - Entity Framework 尝试在添加条目时显式添加 ID

c# - 如何重用具有稍微不同的 ProcessStartInfo 实例的 Process 实例?

asp.net - 为什么 Entity Framework 在使用 ADO.NET 实体数据模型映射数据库表时会自动使用 ObjectContext 而不是 DbContext

asp.net-web-api2 - 使用基于 ASP.NET 身份 token 的身份验证在每个 Web Api 请求中授权声明

asp.net-mvc - MVC routes.MapRoute 名称属性

c# - ASP.NET MVC API 库

javascript - 将值设置为 Html.HiddenField 提交表单后不绑定(bind)到模型

c# - 尝试登录 ASP.NET Identity 2 时出错,列 UserId 无效

asp.net-mvc - 欧文记得浏览器到底是做什么的?