测试包含多个项目的数据库。
第一个 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 标识相关的所有表或重命名它们,以便以后可以复制数据,然后尝试重新创建表,如果成功,则还原旧数据。