繁体   English   中英

ASp.net身份如何为EF使用相同的dbcontext?

[英]ASp.net Identity How to use the same dbcontext for EF?

我正在尝试对ASP.NET Identity和其他工作使用相同的DbContext-否则会发生不好的事情。 不幸的是,我无法实现这一目标-我最终使用了两个DbContext,它们导致对象翻倍。

我不确定调试此代码需要什么代码...如果我错过了什么,请询问。

启动:

public partial class Startup
{
    public void ConfigureAuth(IAppBuilder app)
    {
        app.CreatePerOwinContext(PriorityDBContext.Create);
        app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            Provider = new CookieAuthenticationProvider
            {
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            }
        });

        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
    }
}

PriorityDBContext

public class PriorityDBContext : ApplicationDbContext
    {
        public PriorityDBContext()
            : base()
        {
        }

// seems to be called twice :(
        public static new ApplicationDbContext Create()
        {
            return new PriorityDBContext() as ApplicationDbContext;
        }

 // snipped my DbSets
    }
}

ApplicationDbContext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("EFDBContext", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

在我的主控制器中:

protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
{

    var httpContext = System.Web.HttpContext.Current;
    ApplicationDbContext pbContext httpContext.GetOwinContext().Get<ApplicationDbContext>();

    this.UserManager = httpContext.Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
    this.uoW = new UnitOfWork(pbContext);

    return base.BeginExecuteCore(callback, state);
}

好的,没关系-该错误非常明显,并且基本上是原始状态中剩余的结果。 我的工作单元初始化如下所示:

/// </summary>
private PriorityDBContext dbContext = new PriorityDBContext();

public UnitOfWork()
{ 
}

public UnitOfWork(ApplicationDbContext dbContext)
{
    this.dbContext = (PriorityDBContext)ApplicationDbContext;
}

为每个新的工作单元创建一个新的PriorityDbContext。 从未使用传递到构造函数的dbContext。

现在看起来像这样:

    private PriorityDBContext dbContext = null;

    public UnitOfWork()
    {
        PriorityDBContext dbContext = new PriorityDBContext();
    }

    public UnitOfWork(ApplicationDbContext dbContext)
    {
        this.dbContext = dbContext as PriorityDBContext;
    }

问题解决了 ;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM