You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用EF Core 6从现有数据库生成继承IdentityDbContext的DbContext?

EF Core脚手架生成继承IdentityDbContext的DbContext解决方案

方案一:先排除Identity表生成代码,再修改DbContext基类

  1. 执行脚手架命令时排除所有Identity相关表,避免生成多余的模型和DbSet:

    Scaffold-DbContext "你的数据库连接字符串" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -ExcludeTables AspNetUsers,AspNetRoles,AspNetUserRoles,AspNetUserClaims,AspNetUserLogins,AspNetUserTokens,AspNetRoleClaims
    

    其中-OutputDir Models指定模型文件生成目录,可根据项目结构调整。

  2. 修改生成的DbContext类:

    • 确保项目已安装Microsoft.AspNetCore.Identity.EntityFrameworkCore NuGet包
    • 将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:12:21