后端与接口
在 ASP.NET Core 项目中手动生成数据驱动的…
当需要为 ASP.NET Core 项目中的模型类生成 Razor Pages、Blazor 组件、MVC 控制器/视图或 Minimal API 端点,并希望代码匹配项目现有 CSS 框架与编码风格时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 ASP.NET Core 项目中手动通用
解决思路
- 解析脚手架请求,识别脚手架类型(Razor Pages、Blazor 组件、MVC 控制器、Minimal API、空页面/视图/组件)、模型类及其命名空间、DbContext(新建或已有)与数据库提供程序、命名项(控制器名、端点类名、页面名、视图名、区域名)、选项(OpenAPI、异步操作、分部视图、自定义布局)以及外键范围(是否同时为必需外键引用的父实体生成 CRUD)。
- 在编辑前检查项目文件、Program.cs、目标模型、验证特性、导航属性与外键。
- 复用请求中指定的已有 DbContext;否则创建请求的上下文。只添加所需的提供程序包,并用 AddDbContext 按请求的提供程序和连接字符串注册;当需要迁移且缺少 Microsoft.EntityFrameworkCore.Design 时,添加它并设置 PrivateAssets="all"。
- 为请求的实体及每个必需的父实体生成完整 CRUD:列表、详情、创建、编辑、删除。
- 使用 EF 迁移生命周期:创建迁移并应用。绝不在 Program.cs 中调用 EnsureCreated 或播种数据库。
- 还原、构建并测试生成的项目,在报告完成前修复错误。
- 对 MVC、Razor Pages 和 Blazor:在生成标记前检查现有布局、CSS 和代表性 UI。
- 对 MVC、Razor Pages 和 Blazor:生成完整的子实体与必需父实体的 UI 流程,包括到每个资源的导航路径,以便用户先创建父实体再创建子实体。
- 对 MVC、Razor Pages 和 Blazor:匹配现有 UI 框架与约定;保留 Blazor 现有的渲染模式配置。
- 对 Minimal API:为每个资源使用路由组,并为子资源与必需父资源映射 GET(列表与按 ID)、POST、PUT、DELETE 端点。
- 对 Minimal API:为每个端点添加 OpenAPI 元数据:唯一名称、标签、描述、成功/错误响应元数据,并在启用 OpenAPI 时调用 WithOpenApi。
- 对 Minimal API:创建可执行的 .http 文件,包含每个 CRUD 请求。先创建父记录,在子请求中捕获或明确复用其返回的 ID,并按依赖顺序运行请求。
- 对非 API 脚手架:检查项目布局文件(_Layout.cshtml、MainLayout.razor 或等价文件)。
- 对非 API 脚手架:检查主 CSS 文件(site.css、app.css、Tailwind 配置等)。
- 对非 API 脚手架:检查项目中 1–2 个现有页面、视图或组件。所有生成文件必须匹配现有 UI 框架、CSS 类与约定(如使用 Bootstrap 则生成 Bootstrap 标记,使用 Tailwind 则生成 Tailwind 标记)。
- 对 Blazor 脚手架:[SupplyParameterFromForm] 属性必须使用 = new()(而非 null!),以防止初始 GET 时 EditForm 崩溃。
- 对 Blazor 脚手架:Program.cs 必须在 AddRazorComponents() 上链式调用 .AddInteractiveServerComponents(),并在 MapRazorComponents<App>() 上链式调用 .AddInteractiveServerRenderMode();仅当生成的组件实际使用 @rendermode InteractiveServer(或项目已如此)时才添加交互式服务器服务/渲染模式。
- 对 Blazor 脚手架:不要替换现有的链式渲染模式调用(如 .AddInteractiveWebAssemblyRenderMode())。
- 手动生成所有代码文件:不要使用任何脚手架 CLI 工具;不要添加超出脚手架功能所需的包(如 RuntimeCompilation 或其他便利包);匹配项目现有文件的编码风格(命名约定、缩进、命名空间模式)。
- 对 API 脚手架:为每个端点添加丰富的 OpenAPI 元数据:.WithName("GetTodoItems") 唯一操作 ID、.WithTags("TodoItems") 按资源分组、.WithDescription("Returns all todo items") 人类可读摘要、.Produces<List<TodoItem>>(StatusCodes.Status200OK) 成功响应类型、.Produces(StatusCodes.Status404NotFound) 错误响应、.ProducesValidationProblem() 用于验证输入的端点、.WithOpenApi() 使端点加入 OpenAPI 生成(若未全局启用)。
- 涉及 Entity Framework 时:不要在 Program.cs 中播种数据库,始终使用迁移。
- 涉及 Entity Framework 时:对 dotnet ef,优先从本地工具清单运行 dotnet tool restore;仅在没有清单时才全局安装。
- 涉及 Entity Framework 时:检查模型的导航属性与外键,确保被引用实体存在 CRUD 端点/页面。
- 涉及 Entity Framework 时:对 API 脚手架,.http 文件必须先创建父实体再创建子实体,使用与创建顺序一致的 FK 值。
- 对 API 脚手架:在项目目录创建名为 {ModelName}.http 的 .http 文件;若同名文件已存在,追加数字后缀(Product2.http、Product3.http)直到唯一。
- 对 API 脚手架:为每个已脚手架化的 CRUD 端点(包括父/依赖实体端点)包含示例请求。
- 对 API 脚手架:每个请求必须指向与已映射端点匹配的正确 URL 路径。
- 对 API 脚手架:请求标签必须准确描述操作(如 "Create a category" 必须 POST 到 categories 端点)。
- 对 API 脚手架:按依赖顺序排列请求,先创建父实体再创建子实体。
- 对 API 脚手架:尽可能使用 HTTP 客户端的变量/模板功能从父创建响应中捕获 ID,并在子实体 POST 负载中复用为外键值。
- 对 API 脚手架:若客户端无法捕获响应值,添加注释说明运行父创建请求后必须更新哪些 FK ID;不要留下不切实际的占位或假定 FK 值。
- 验证:从项目目录运行 dotnet restore && dotnet build。
- 验证:若使用 Entity Framework 且为首次验证,运行 dotnet ef migrations add InitialCreate,然后运行 dotnet ef database update;若多次运行需更改 "InitialCreate" 名称,因为 EF Core 要求迁移名称唯一。
- 验证:对 API 脚手架,检查 Properties/launchSettings.json,若存在名为 https 的配置文件则使用 dotnet run --launch-profile https;按依赖顺序逐个执行每个 .http 请求;报告每个请求的方法、URL 和状态码;若任何请求返回非 2xx 则停止并修复。
- 验证:修复所有错误直到构建成功。
适用边界 · 注意事项
- 项目不是 ASP.NET Core 项目
- 需要脚手架化非 Web 产物(类库、控制台应用等)
- 更倾向于使用基于 CLI 的脚手架工具