Blazor 结合 EF Core 做数据库操作,核心是把服务注册好、上下文配对、页面里调用得当——不难,但容易卡在依赖注入或异步处理上。
一、配置 EF Core 数据库上下文
先在 Program.cs(.NET 6+)中注册 DbContext:
用AddDbContextFactory<appdbcontext></appdbcontext>(推荐 Server 项目)或
AddDbContext<appdbcontext></appdbcontext>(WASM 需注意限制) 连接字符串从
appsettings.json读取,确保包含正确的提供程序(如 SQL Server、SQLite 或 PostgreSQL) Server 端建议启用
EnableSensitiveDataLogging方便调试(上线前关掉)
二、在 Blazor 组件中安全使用 DbContext
Blazor Server 和 WASM 处理方式不同:
Blazor Server:用@inject IDbContextFactory<appdbcontext> DbFactory</appdbcontext>,每次操作都
using var ctx = DbFactory.CreateDbContext();——避免跨请求复用上下文 Blazor WASM:EF Core 不直接访问数据库,需通过 API 控制器暴露接口,前端调用 HTTP 请求(如
HttpClient.PostAsJsonAsync) 所有数据库操作必须 异步,组件内用
await+
StateHasChanged()触发重绘(尤其在事件回调后)
三、常见增删改查写法示例
以查询用户列表为例(Server 端):
查:var users = await ctx.Users.ToListAsync();增:
ctx.Users.Add(new User { Name = "张三" }); await ctx.SaveChangesAsync();
改:var user = await ctx.Users.FindAsync(id); if (user != null) { user.Name = "李四"; await ctx.SaveChangesAsync(); }
删:ctx.Users.Remove(user); await ctx.SaveChangesAsync();
注意:
FindAsync比
FirstOrDefaultAsync更高效(主键查找),非主键条件请用后者。
四、错误处理与调试小贴士
数据库操作失败很常见,别让页面白屏:
用try/catch包裹关键操作,捕获
DbUpdateException、
SqlException等具体异常 检查迁移是否已应用:
dotnet ef migrations add Init+
dotnet ef database updateWASM 调试时,F12 查看 Network 标签确认 API 是否返回 200,后端日志看 EF 执行的 SQL
基本上就这些。跑通第一个“加载用户列表”后,后续 CRUD 就顺了。
