更改ASP.NET标识以使用现有数据库

brk*_*brk 5 c# asp.net-mvc entity-framework asp.net-identity

我正在使用ASP.NET MVC 5和Database-First工作流程.我创建了身份表(AspNetUsers,AspNetRoles等)在现有数据库但我有越来越的问题寄存器登录功能正常工作.

这是IdentityModels.cs班级

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("MyConnectionString") // I use "MyConnectionString" instead of "DefaultConnection" 
    {
    }
Run Code Online (Sandbox Code Playgroud)

这就是EF连接字符串的web.config样子

<connectionStrings><add name="MyConnectionString" connectionString="metadata=res://*/Entities.MyModel.csdl|res://*/Entities.MyModel.ssdl|res://*/Entities.MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=My-Pc\SQLEXPRESS;initial catalog=MyExistingDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

为了更好地衡量,这里是从edmx生成的上下文类

public partial class MyConnectionString : DbContext
{
    public MyConnectionString()
        : base("name=MyConnectionString")
    {
    }
Run Code Online (Sandbox Code Playgroud)

对我来说似乎都很好,它应该能够在数据库中创建用户但是我在登录或尝试分别注册时遇到以下错误:

登录:

实体类型ApplicationUser不是当前上下文的模型的一部分

第73行:var result = await SignInManager.PasswordSignInAsync(model.Email,model.Password,model.RememberMe,shouldLockout:false);

异常详细信息:System.InvalidOperationException:实体类型ApplicationUser不是当前上下文的模型的一部分.

注册:

实体类型ApplicationUser不是当前上下文的模型的一部分

第155行:var result = await UserManager.CreateAsync(user,model.Password);

异常详细信息:System.InvalidOperationException:实体类型ApplicationUser不是当前上下文的模型的一部分.

大多数文章似乎都集中在Code-First以及如何从LocalDb转到SQLExpress等以及如何更改连接字符串,但是我无法在很长一段时间内解决这个问题.

编辑,解决方案:正如@ChrFin所提到的,你可以将它们并排使用,这就是我最终要做的事情.我只是添加了一个新的常规连接字符串,web.config并让它指向现有的数据库.PS.请记住,连接字符串名称不能与现有名称相同,并且必须与您为ApplicationDbContext构造函数提供的名称相同.

Chr*_*Fin 5

我认为ASP.NET身份不支持这种情况,因为它需要DbContext扩展IdentityDbContext<ApplicationUser>(或类似).

为什么要强制身份进入DB-First上下文?
您可以使用Code-First上下文用于Identity以及其他DB-First上下文而不会出现问题......