无法在“ApplicationUser”上配置密钥,因为它是派生类型,但ApplicationUser上没有密钥配置

问题描述 投票:0回答:2

我正在尝试使用ApplicationUser自定义IdentityUser,我按照微软文章中的步骤进行操作,但是当我运行该应用程序时,我在方法

base.OnModelCreating(modelBuilder);
上收到此错误:

System.InvalidOperationException HResult=0x80131509 消息=A 键 无法在“ApplicationUser”上配置,因为它是派生的 类型。必须在根类型“IdentityUser”上配置密钥。如果 您不打算将“IdentityUser”包含在模型中, 确保它不包含在您的上下文的 DbSet 属性中, 在对模型构建器的配置调用中引用,或从 模型中包含的类型的导航属性。
来源=Microsoft.EntityFrameworkCore StackTrace:位于 Microsoft.EntityFrameworkCore.Metadata.Internal.EntityType.SetPrimaryKey(IReadOnlyList

1
  properties, ConfigurationSource configurationSource)    at
  Microsoft.EntityFrameworkCore.Metadata.Internal.InternalEntityTypeBuilder.PrimaryKey(IReadOnlyList
1 属性、ConfigurationSource 配置源)位于 Microsoft.EntityFrameworkCore.Metadata.Internal.InternalEntityTypeBuilder.PrimaryKey(IReadOnlyList
1
  clrProperties, ConfigurationSource configurationSource)    at
  Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder
1.HasKey(Expression
1
  keyExpression)    at
  Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserContext
5.<>c__DisplayClass20_0.b__0(EntityTypeBuilder
1
  b)    at
  Microsoft.EntityFrameworkCore.ModelBuilder.Entity[TEntity](Action
1) 构建动作)在 Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserContext
5.OnModelCreating(ModelBuilder
  builder)    at
  Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext
8.OnModelCreating(模型构建器 建设者)在 Assisente_de_Estagio.Data.ApplicationDbContext.OnModelCreating(模型构建器 modelBuilder) 在 C:\Users\gui\source 中 epos\助手 Estágio\Assistancee de Estagio\Data\ApplicationDbContext.cs:第 40 行
在 Microsoft.EntityFrameworkCore.Infrastruct.ModelCustomizer.Customize(模型构建器 modelBuilder、DbContext 上下文)位于 Microsoft.EntityFrameworkCore.Infrastruct.RelationalModelCustomizer.Customize(模型构建器 modelBuilder、DbContext 上下文)位于 Microsoft.EntityFrameworkCore.Infrastruct.ModelSource.CreateModel(DbContext 上下文、IConventionSetBuilder conventionSetBuilder、IModelValidator 验证器)在 Microsoft.EntityFrameworkCore.Infrastruct.ModelSource.<>c__DisplayClass5_0.b__1() 在System.Lazy`1.ViaFactory(LazyThreadSafetyMode模式)

上下文代码:

public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
    {
    }

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    public virtual DbSet<Curso> Curso { get; set; }
    public virtual DbSet<Documento> Documento { get; set; }
    public virtual DbSet<OpcaoRequisito> OpcaoRequisito { get; set; }
    public virtual DbSet<ProgressoDoUsuario> ProgressoDoUsuario { get; set; }
    public virtual DbSet<Requisito> Requisito { get; set; }
    public virtual DbSet<RequisitoDeDocumento> RequisitoDeDocumento { get; set; }
    public virtual DbSet<RequisitoDeUsuario> RequisitoDeUsuario { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }

应用程序用户.cs

public class ApplicationUser : IdentityUser
{

}
entity-framework asp.net-core asp.net-core-mvc
2个回答
15
投票

您需要将代码中使用 IdentityUser 的所有位置替换为 ApplicationUser。

例如在脚手架的 Identity/Pages/Account/Register.cshtml.cs 中,您需要进行以下更改:

private readonly SignInManager<IdentityUser> _signInManager;
private readonly UserManager<IdentityUser> _userManager;

private readonly SignInManager<ApplicationUser> _signInManager;
private readonly UserManager<ApplicationUser> _userManager;

我也遇到了同样的问题。当我在代码中将所有使用 IdentityUser 替换为 ApplicationUser 后,错误消失了。


0
投票

我通过更改在我的 dbcontext 中修复了这个问题

 DbSet<ApplicationUser<string>> AspNetUserRoles { get; set; } to public DbSet<ApplicationUser> AspNetUserRoles { get; set; }
© www.soinside.com 2019 - 2024. All rights reserved.