最近,我将.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中的类型更改为IdentityUserIdentityRole。为什么在startup.cs中修复该问题,我在调用ApplicationUser时必须使用ApplicationRoleservices.AddIdentity<ApplicationUser, ApplicationRole>

最佳答案

听起来像是在引用IdentityUser的项目中的某个地方。

Ctrl + F“IdentityUser”整个解决方案,然后将对IdentityUser的所有引用更改为ApplicationUser(而不是在ApplicationUser类中从其派生的位置)。

希望这可以帮助

关于c# - DbInitializer失败,必须在根类型上配置 key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49702009/

10-11 19:08