ASP.NET Core中如何基于IdentityDbContext完成数据库反向工程
EF Core反向工程生成IdentityDbContext派生上下文的实现方法
方案1:使用自定义脚手架模板(推荐,支持多次反向工程不被覆盖)
- 先全局安装EF Core官方模板包,执行命令:
dotnet new install Microsoft.EntityFrameworkCore.Templates - 在当前项目根目录下导出EF脚手架模板到本地文件夹:
dotnet new ef-templates --output ./EFCoreTemplates - 打开导出的模板文件
./EFCoreTemplates/DbContext.tpl,做两处修改:- 在文件顶部的引用区域添加:
using Microsoft.AspNetCore.Identity.EntityFrameworkCore; - 找到上下文类声明行,把默认的
: DbContext修改为: IdentityDbContext,如果有自定义Identity实体则替换为对应的泛型版本,例如: IdentityDbContext<MyUser, MyRole, string>
- 在文件顶部的引用区域添加:
- 执行反向工程命令时添加
--custom-templates参数指定模板路径,示例命令:dotnet ef dbcontext scaffold "你的数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer --custom-templates ./EFCoreTemplates --output-dir Entities --context-dir Data --context AppDbContext
按以上步骤生成的上下文会默认派生自IdentityDbContext,后续再次执行反向工程更新模型时也不会被覆盖。
方案2:手动修改生成的上下文(适合仅生成一次的场景)
- 先正常执行反向工程命令,生成默认派生自
DbContext的上下文类 - 打开生成的上下文文件,手动修改两处:
- 顶部添加引用:
using Microsoft.AspNetCore.Identity.EntityFrameworkCore; - 把类的继承关系从
DbContext改为IdentityDbContext(或对应的泛型版本)
- 顶部添加引用:
注意:如果后续还需要执行反向工程更新模型,手动修改的内容会被脚手架覆盖,这种场景建议使用方案1。
额外注意事项
- 如果你的Identity体系自定义了用户、角色等实体的派生类,需要使用对应泛型参数的
IdentityDbContext重载,确保基类泛型参数和你的自定义实体匹配 - 反向工程生成的AspNetUsers、AspNetRoles等Identity内置表的实体配置不需要手动删除,
IdentityDbContext内置的默认配置会和生成的配置自动合并,有自定义字段时可以在OnModelCreating方法中补充配置即可。
内容的提问来源于stack exchange,提问作者Robin Haider
相关产品推荐
相关产品推荐

