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

Blazor Server添加Scaffold Identity时无法选择现有ApplicationDbContext的解决办法

解决Blazor Server跨项目添加Scaffold Identity的步骤

1. 确认项目引用与依赖

  • 确保Blazor Server项目已引用DataAccess项目(右键Blazor项目→添加→项目引用→勾选DataAccess)
  • 给Blazor Server项目安装以下NuGet包:
    • Microsoft.AspNetCore.Identity.EntityFrameworkCore
    • Microsoft.AspNetCore.Identity.UI
    • Microsoft.EntityFrameworkCore.Design
  • 确保DataAccess项目已安装:
    • Microsoft.EntityFrameworkCore
    • Microsoft.EntityFrameworkCore.SqlServer
    • Microsoft.AspNetCore.Identity.EntityFrameworkCore

2. 修正ApplicationDbContext继承关系

打开DataAccess项目中的ApplicationDbContext类,确保它继承自IdentityDbContext<IdentityUser>(而非普通的DbContext):

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    // 你的自定义DbSet定义
}

3. 手动配置Program.cs中的服务

在Blazor Server项目的Program.cs中,添加DbContext与Identity服务注册:

var builder = WebApplication.CreateBuilder(args);

// 添加DbContext,指定连接字符串
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

// 添加Identity服务
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

// 其他现有配置...

var app = builder.Build();

// 中间件配置(确保添加以下Identity相关中间件)
app.UseAuthentication();
app.UseAuthorization();

// 其他现有中间件...

app.Run();

同时确认Blazor项目的appsettings.json中存在正确的连接字符串:

"ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=YourDbName;Trusted_Connection=True;MultipleActiveResultSets=true"
}

4. 使用命令行脚手架生成Identity UI

放弃可视化界面,改用Package Manager Console执行命令(更稳定):

  1. 打开Visual Studio的工具→NuGet包管理器→包管理器控制台
  2. 设置默认项目为你的Blazor Server项目
  3. 执行以下命令(替换YourBlazorServerProjectName和YourDataAccessProjectName为实际项目名):
Scaffold-Identity -Context ApplicationDbContext -Project YourBlazorServerProjectName -StartupProject YourBlazorServerProjectName -Force
  1. 若需要初始化数据库,执行迁移命令:
Add-Migration InitialIdentitySetup -Context ApplicationDbContext -Project YourDataAccessProjectName -StartupProject YourBlazorServerProjectName
Update-Database -Context ApplicationDbContext -Project YourDataAccessProjectName -StartupProject YourBlazorServerProjectName

5. 验证并调整UI

生成完成后,Blazor项目中会新增Areas/Identity文件夹,包含Identity相关UI页面。可以根据需求修改这些页面,同时确保项目能正常编译运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:55:15