最近,我将.NET 1.1.4代码迁移到.NET 2.0.0。一切似乎都正常。现在,我尝试通过执行以下操作添加新的模型/表:dotnet ef update
我得到以下异常:
DbInitializer失败!无法在“ApplicationUser”上配置密钥,因为它是派生类型。密钥必须在根类型“IdentityUser”上配置
我有一个扩展IdentityUser的ApplicationUser和扩展IdentityRole的ApplicationRole,这是其他一些教程/ stackoverflow帖子所说的。
我不确定我可能还会错过什么。
在我的ApplicationUser类中,我有:ICollection<IdentityUserRole<string>>
是否必须是像ApplicationUserRole这样的自定义类型? IdentityUserRole和IdentityRole有什么区别?
编辑:
我认为可能是因为在OnModelCreating
的context.cs文件中,我有:
builder.Entity<ApplicationUser>()
.ToTable("AspNetUsers")
.HasKey(x => x.Id);
这里
Id
继承自IdentityUser
。编辑2:
所以我注释掉了这一行,该错误消失了。转到下一行,这基本上是相同的,但对我的ApplicationRole来说,它扩展了IdentityRole。我不太确定这是什么意思。我是否需要覆盖id属性?
EDIT3:
确定,所以我将builder.Entity中的类型更改为
IdentityUser
和IdentityRole
。为什么在startup.cs中修复该问题,我在调用ApplicationUser
时必须使用ApplicationRole
和services.AddIdentity<ApplicationUser, ApplicationRole>
最佳答案
听起来像是在引用IdentityUser的项目中的某个地方。
Ctrl + F“IdentityUser”整个解决方案,然后将对IdentityUser的所有引用更改为ApplicationUser(而不是在ApplicationUser类中从其派生的位置)。
希望这可以帮助
关于c# - DbInitializer失败,必须在根类型上配置 key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49702009/