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

如何在Blazor中基于API生成CRUD,避免手动修改EF Core脚手架代码?

解决方案

1. 先通过脚手架生成Web API CRUD控制器

在Visual Studio中,生成API的CRUD有对应的脚手架选项:

  • 右键项目 → 添加 → 新建脚手架项
  • 选择API Controller with actions, using Entity Framework(不要选Razor Component)
  • 选择目标模型类、DbContext类,确认后会自动生成包含完整CRUD接口的API控制器,实现标准的GET/POST/PUT/DELETE等RESTful操作。

2. 批量改造Blazor组件为API调用(避免手动修改40张表)

方式一:批量代码替换(快速见效)

利用Visual Studio的全局查找替换功能(支持正则表达式),批量替换现有Razor组件中的数据库操作代码:

  1. 替换注入语句:
    把所有组件顶部的:
    @inject IDbContextFactory<HypnoPlatform.Persistence.HypnoContext> DbFactory
    
    替换为:
    @inject HttpClient Http
    
  2. 替换数据查询逻辑:
    匹配类似:
    await using var context = await DbFactory.CreateDbContextAsync();
    var [entityList] = await context.[EntityName].ToListAsync();
    
    替换为:
    var [entityList] = await Http.GetFromJsonAsync<List<[EntityName]>>("api/[EntityNamePlural]");
    
    (注意替换[EntityName]和[EntityNamePlural]为对应实体的名称和复数形式,比如Product对应Products)
  3. 替换创建/编辑/删除逻辑:
    • 创建操作:把context.[EntityName].Add(entity); await context.SaveChangesAsync();替换为await Http.PostAsJsonAsync("api/[EntityNamePlural]", entity);
    • 编辑操作:把context.Update(entity); await context.SaveChangesAsync();替换为await Http.PutAsJsonAsync($"api/[EntityNamePlural]/{entity.Id}", entity);
    • 删除操作:把context.[EntityName].Remove(entity); await context.SaveChangesAsync();替换为await Http.DeleteAsync($"api/[EntityNamePlural]/{entity.Id}");

方式二:自定义脚手架模板(一劳永逸)

如果后续还要生成新的组件,直接修改Visual Studio的Razor Component脚手架模板,让生成的代码默认使用API调用:

  1. 找到VS的脚手架模板路径(以VS2022社区版为例):
    C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Web Tools\Scaffolding\Templates\Mvc\RazorComponent
    
  2. 复制现有模板文件(比如List.cshtml.t4、Create.cshtml.t4等),修改其中的数据库操作代码为API调用逻辑:
    • 替换注入DbContextFactory的代码为注入HttpClient
    • 将所有DbContext相关的CRUD代码替换为对应的HttpClient调用
  3. 保存修改后的模板,后续生成Razor组件时就会直接生成API调用版本的代码。

3. 注意事项

  • 确保API项目和Blazor项目在同一解决方案中,或者在Blazor项目的appsettings.json中配置正确的API地址,让HttpClient能正常访问API。
  • 生成API控制器时,确认每个控制器的路由正确(默认是api/[ControllerName],对应实体复数形式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:35:08