使用多个项目测试数据库。
第一个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'
无法在身份表中的任何位置看到此列?
答案 0 :(得分:1)
首先删除与ASP身份相关的所有表,或者重命名它们,以便稍后复制数据,然后尝试重新创建表,如果成功,则还原旧数据。