ASP.NET 标识 2 表映射



测试包含多个项目的数据库。

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

同一数据库上的第二个项目不起作用,我很困惑为什么不工作。

途径是注册。

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

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

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

想要使用标准标识表,因此添加了以下代码,接下来会正确调用(在我的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 插入到列'用户名',表 'dbName.dbo.AspNetUsers';"

错误似乎是不言自明的,但是:

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

2)调试显示用户。用户名有一个值,那么为什么它认为它是 零?

MVC 和身份的新手,因此任何有助于我学习的指针将不胜感激。


编辑

我现在已将 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");
        }

我现在得到的错误是:

列名称"鉴别器"无效

在标识表中的任何地方都看不到此列?

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

相关内容

  • 没有找到相关文章

最新更新