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

ASP Core 3.1添加Identity时Scaffold菜单缺失Data context class

ASP.NET Core 3.1 添加Identity时Scaffold菜单缺失Data context class选项排查方案

依赖包版本与安装位置校验

  • 所有EF Core、Identity、代码生成相关NuGet包必须严格对齐3.1.x稳定版本,禁止混装5.0/6.0+版本,重点核对以下包版本:
    • Microsoft.AspNetCore.Identity.EntityFrameworkCore
    • Microsoft.AspNetCore.Identity.UI
    • Microsoft.EntityFrameworkCore.SqlServer
    • Microsoft.EntityFrameworkCore.Design
    • Microsoft.VisualStudio.Web.CodeGeneration.Design
      以上包统一使用3.1分支最高稳定版3.1.32即可。
  • Microsoft.VisualStudio.Web.CodeGeneration.Design必须安装在Web主项目中,不能只安装在数据访问类库中,Scaffold工具只会扫描启动项目的引用清单。

现有DbContext适配修改

你之前通过数据库反向工程生成的默认DbContext不满足Identity要求,必须做以下调整:

  • 让DbContext继承自IdentityDbContext<你的自定义用户类>,如果暂时不扩展用户字段,直接继承无用户类泛型的IdentityDbContext即可,不能保留原始继承DbContext的实现。
  • 为DbContext添加接收DbContextOptions<当前DbContext类型>参数的公共构造函数,透传给基类构造逻辑。
  • 在OnModelCreating方法重写的第一行调用base.OnModelCreating(modelBuilder),再保留你之前反向工程生成的其他业务表映射配置,避免Identity相关表结构映射被覆盖。
    参考实现代码:
    public class AppDbContext : IdentityDbContext<AppUser>
    {
        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
        
        // 保留之前生成的业务表DbSet
        public DbSet<Order> Orders { get; set; }
        // ...其他DbSet
    
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            // 保留之前生成的业务表FluentAPI配置
            // ...
        }
    }
    

Startup服务注册校验

  • ConfigureServices方法中服务注册顺序不能错:先注册DbContext,再注册Identity服务,最后注册Mvc/Razor Pages服务,参考配置:
    public void ConfigureServices(IServiceCollection services)
    {
        // 保留原有数据库连接配置,不需要修改连接字符串
        services.AddDbContext<AppDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        
        // 添加Identity服务,指向自定义用户类和现有DbContext
        services.AddDefaultIdentity<AppUser>(options => 
            options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<AppDbContext>();
    
        services.AddControllersWithViews();
        services.AddRazorPages(); // 必须添加,Identity默认依赖Razor Pages运行
    }
    
  • Configure方法中,在app.UseRouting()之后、app.UseEndpoints()之前,添加认证授权中间件:
    app.UseAuthentication();
    app.UseAuthorization();
    

缓存清理与替代操作方案

  • 完成以上修改后,完全关闭Visual Studio,删除项目根目录下的.vs隐藏文件夹、bin、obj目录,重新打开解决方案等待NuGet包还原完成,再进入Scaffold菜单,等待3-5秒让工具扫描完所有程序集,Data context class下拉选项就会正常加载。
  • 如果GUI菜单始终加载异常,直接绕开GUI使用命令行生成Identity页面,在包管理器控制台执行以下命令即可:
    # 先确认代码生成工具包已安装
    Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Version 3.1.32
    # 生成需要的Identity页面,替换成你自己的DbContext名称和需要的页面列表
    dotnet aspnet-codegenerator identity -dc AppDbContext --files "Account.Register;Account.Login;Account.Logout"
    

注意:如果你的数据库中已经存在自定义用户表,生成首次Identity迁移后,先检查迁移脚本,删除和现有用户表结构冲突的建表/字段修改逻辑,再执行数据库更新,避免丢失现有业务数据。


内容的提问来源于stack exchange,提问作者matthewfreestylemusiccouk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:30:39