C# ASp.net标识如何为EF使用相同的dbcontext?
我正在尝试使用相同的DbContext作为ASP.NET标识和我的其他工作-否则会发生不好的事情。不幸的是,我无法做到这一点——我最终使用了两个DBContext,这导致了对象加倍等 我不确定调试这个需要什么代码…如果我遗漏了什么,请询问 启动:C# ASp.net标识如何为EF使用相同的dbcontext?,c#,asp.net-mvc,entity-framework,asp.net-identity,C#,Asp.net Mvc,Entity Framework,Asp.net Identity,我正在尝试使用相同的DbContext作为ASP.NET标识和我的其他工作-否则会发生不好的事情。不幸的是,我无法做到这一点——我最终使用了两个DBContext,这导致了对象加倍等 我不确定调试这个需要什么代码…如果我遗漏了什么,请询问 启动: public partial class Startup { public void ConfigureAuth(IAppBuilder app) { app.CreatePerOwinContext(PriorityD
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);
}
}
应用程序上下文
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;
}
private PriorityDBContext dbContext = null;
public UnitOfWork()
{
PriorityDBContext dbContext = new PriorityDBContext();
}
public UnitOfWork(ApplicationDbContext dbContext)
{
this.dbContext = dbContext as PriorityDBContext;
}
问题解决 只需将所有内容从PriorityDBContext移动到ApplicationDbContext即可。更改后,您只有一个EF数据库上下文,应该能够使用相同的数据库来标识和其他内容。@Horizon\u Net错误在其他地方看到我的答案,基本上没有看到非常明显的一行,但您肯定是正确的,这将是代码的一个可能改进。
private PriorityDBContext dbContext = null;
public UnitOfWork()
{
PriorityDBContext dbContext = new PriorityDBContext();
}
public UnitOfWork(ApplicationDbContext dbContext)
{
this.dbContext = dbContext as PriorityDBContext;
}