ASP.NET Identity 2表映射

时间:2016-03-09 18:15:06

标签: c# asp.net-mvc asp.net-identity

使用多个项目测试数据库。

第一个MVC项目使用Identity 2正常工作。构建了正确的表,即AspNetUsers,AspNetRoles等

同一个数据库上的第二个项目无法正常工作,我很困惑为什么不这样做。

衔接途径是注册。

在我的AccountController.cs中,Register方法按预期调用并命中此代码:

var user = new ApplicationUser { UserName = model.ContactEmail, Email = model.ContactEmail };

使用VS2015进行调试,显示用户已完全填充。

想要使用standlone身份表,以便添加以下代码(接下来正确调用)(在我的IdentityModels.cs文件中):

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<IdentityUser>().ToTable("sp_AspNetUsers","dbo");
        }

调试器没有投诉。

返回Account Controller.cs中的下一行:

var result = await UserManager.CreateAsync(user, model.Password);

错误说“无法将值NULL插入列'UserName',表'dbName.dbo.AspNetUsers ';”

错误似乎是自我解释但是:

  

1)为什么它引用AspNetUsers表而不是   sp_AspNetUsers表?

     

2)调试显示user.UserName有一个值,为什么它认为它是   NULL?

MVC和Identity的新手,所以任何有助于我学习的指针都会受到赞赏。

修改

我现在已将IdentityModel.cs中的代码修改为:

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<IdentityUser>().ToTable("sp_AspNetUsers");
            modelBuilder.Entity<ApplicationUser>().ToTable("sp_AspNetUsers");
            modelBuilder.Entity<IdentityUserRole>().ToTable("sp_AspNetUserRoles");
            modelBuilder.Entity<IdentityUserLogin>().ToTable("sp_AspNetUserLogins");
            modelBuilder.Entity<IdentityUserClaim>().ToTable("sp_AspNetUserClaim");
            modelBuilder.Entity<IdentityRole>().ToTable("sp_AspNetRoles");
        }

我现在得到的错误是:

  

无效的列名称'Discriminator'

无法在身份表中的任何位置看到此列?

1 个答案:

答案 0 :(得分:1)

首先删除与ASP身份相关的所有表,或者重命名它们,以便稍后复制数据,然后尝试重新创建表,如果成功,则还原旧数据。