entity-framework - 无法在“ApplicationUser”上配置密钥,因为它是派生类型,但 ApplicationUser 上没有密钥配置
问题描述
我正在尝试使用 ApplicationUser 自定义 IdentityUser,我按照微软文章中的步骤操作,但是当我运行应用程序时,我在方法上收到此错误base.OnModelCreating(modelBuilder);
:
System.InvalidOperationException HResult=0x80131509 消息=无法在“ApplicationUser”上配置密钥,因为它是派生类型。必须在根类型“IdentityUser”上配置密钥。如果您不打算将“IdentityUser”包含在模型中,请确保它不包含在上下文的 DbSet 属性中、在对 ModelBuilder 的配置调用中引用或从包含的类型的导航属性中引用在模型中。
Source=Microsoft.EntityFrameworkCore StackTrace:在 Microsoft.EntityFrameworkCore.Metadata.Internal.InternalEntityTypeBuilder.PrimaryKey(IReadOnlyList 的 Microsoft.EntityFrameworkCore.Metadata.Internal.EntityType.SetPrimaryKey(IReadOnlyList1 properties, ConfigurationSource configurationSource) at Microsoft.EntityFrameworkCore.Metadata.Internal.InternalEntityTypeBuilder.PrimaryKey(IReadOnlyList
1 属性,ConfigurationSource configurationSource)1 clrProperties, ConfigurationSource configurationSource) at Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder
在C :1 keyExpression) at Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserContext
\用户\gui\source\repos\Assistente De Estágio\Assistente de Estagio\Data\ApplicationDbContext.cs:40 行1 b) at Microsoft.EntityFrameworkCore.ModelBuilder.Entity[TEntity](Action
5.OnModelCreating(ModelBuilder builder) at Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext
在 Microsoft.EntityFrameworkCore.Infrastructure.ModelCustomizer.Customize(ModelBuilder modelBuilder, DbContext context) 在 Microsoft.EntityFrameworkCore.Infrastructure.RelationalModelCustomizer.Customize(ModelBuilder modelBuilder, DbContext context) 在 Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder , IModelValidator 验证器)在 Microsoft.EntityFrameworkCore.Infrastructure.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
{
}
解决方案
您需要将代码中使用 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 之后,错误就消失了。
推荐阅读
- c++ - 使用正则表达式拆分 verilog 元素描述
- vue.js - 为什么“vue-cli-service build”会创建文件的多个版本而不是将其放入app-chunk
- powershell - 使用 powershell 打开边缘的问题
- reporting-services - Does anyone have working examples of configuration files for SSRS (SQL Server Reporting Services) for custom security plugins?
- flutter - 固定小部件在一行中的位置
- python - 如何通过从点拆分来从 s[0][i:j] 中剪切列表的子字符串?
- r - 如何在 Rmarkdown 中将 PNG 文件包含为编号表?
- firefox-addon - 损坏的 Firefox 附加组件
- azure - 如何使用 PowerShell 上传和删除 Azure Web 应用程序的文件
- next.js - NEXT JS 使用 Auth0 运行时错误,一秒钟后消失