如何用EF Core 6从现有数据库生成继承IdentityDbContext的DbContext?
EF Core脚手架生成继承IdentityDbContext的DbContext解决方案
方案一:先排除Identity表生成代码,再修改DbContext基类
执行脚手架命令时排除所有Identity相关表,避免生成多余的模型和DbSet:
Scaffold-DbContext "你的数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -ExcludeTables AspNetUsers,AspNetRoles,AspNetUserRoles,AspNetUserClaims,AspNetUserLogins,AspNetUserTokens,AspNetRoleClaims其中
-OutputDir Models指定模型文件生成目录,可根据项目结构调整。修改生成的DbContext类:
- 确保项目已安装
Microsoft.AspNetCore.Identity.EntityFrameworkCoreNuGet包 - 将DbContext的基类从
DbContext替换为IdentityDbContext;如果使用自定义用户/角色实体,替换为IdentityDbContext<你的自定义User类, 你的自定义Role类, 主键类型> - 移除任何误生成的Identity表相关DbSet,因为
IdentityDbContext已内置这些集合
- 确保项目已安装
方案二:基于已有的IdentityDbContext增量生成非Identity表
如果已经存在继承IdentityDbContext的DbContext,不想被脚手架覆盖,可通过以下命令增量添加其他表的代码:
Scaffold-DbContext "你的数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context 你的现有IdentityDbContext类名 -ExcludeTables AspNetUsers,AspNetRoles,AspNetUserRoles,AspNetUserClaims,AspNetUserLogins,AspNetUserTokens,AspNetRoleClaims -NoOnConfiguring
-Context参数指定要往目标DbContext中添加新表的DbSet-NoOnConfiguring避免脚手架覆盖现有DbContext的配置方法- 继续用
-ExcludeTables跳过Identity表,防止生成重复代码
关键注意事项
- 若使用自定义Identity实体(比如
AppUser继承IdentityUser),DbContext需对应继承IdentityDbContext<AppUser, AppRole, string>,主键类型根据数据库实际情况调整 - 生成代码后,检查DbContext的构造函数和配置逻辑,确保与项目的依赖注入机制兼容
- 若Identity表包含自定义字段,需手动在自定义Identity实体中添加对应属性,脚手架不会自动生成这部分内容
内容的提问来源于stack exchange,提问作者user19187727
相关产品推荐
相关产品推荐

