OpenIddict运行报错:无法为OpenIddictEntityFrameworkCoreApplication创建DbSet
问题原因
该错误是由于OpenIddict的内置EF Core实体未注册到你的ApplicationDbContext模型中,EF Core无法识别OpenIddictEntityFrameworkCoreApplication等OpenIddict预置实体类型导致的。
解决方案
你只需要修改ApplicationDbContext的配置,手动注册OpenIddict的实体映射即可,无需改动现有OpenIddict服务配置:
第一步:修改ApplicationDbContext代码
重写上下文的OnModelCreating方法,调用OpenIddict提供的模型配置扩展方法:
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options): base(options) { } // 新增以下代码 protected override void OnModelCreating(ModelBuilder modelBuilder) { // 先执行原有Identity的模型配置 base.OnModelCreating(modelBuilder); // 注册OpenIddict所有内置实体的EF Core映射规则 modelBuilder.UseOpenIddict(); }
第二步:生成并执行数据库迁移
修改完成后需要执行EF Core迁移,将OpenIddict对应的表结构同步到数据库:
- 包管理器控制台命令:
Add-Migration AddOpenIddictTables Update-Database - dotnet CLI命令:
dotnet ef migrations add AddOpenIddictTables dotnet ef database update
如果你自定义了OpenIddict的默认实体(比如扩展了应用、授权、令牌等实体字段),只需要调用对应泛型版本的UseOpenIddict<TApplication, TAuthorization, TScope, TToken, TKey>方法,传入你自定义的实体类型和主键类型即可。
内容的提问来源于stack exchange,提问作者Mark Smith
相关产品推荐
相关产品推荐

