
外部精选
软件工程
#开发者实时流开发者提议为 EF Core 增加统一 CLI 命令,一键完成实体脚手架与迁移
来源标题:Proposal: Unified CLI commands for rapid EF Core entity scaffolding
有开发者提议扩展 dotnet-ef 工具,新增统一命令以原子化方式完成实体类生成、DbSet 注入和数据库迁移。该方案拟加入 dotnet ef entity create 命令,支持自动生成实体类并解析内联属性定义。目前这还只是一份概念验证提案,旨在减少 EF Core 开发中分散的手动步骤。
Hacker News 最新mudsaleh882026/11/12 · 今天8 分钟阅读
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
要解决的问题是什么? 自动生成文件夹和 cs 文件、注入 DbSet,并在单个原子步骤中运行迁移 目前,在 EF Core 中创建实体并应用数据库迁移需要多个彼此割裂的手动步骤:先创建一个新的类文件,然后手动定位并编辑目标 DbContext 以注册 DbSet,接着运行 dotnet ef migrations add,最后运行 dotnet ef database update。 在现代快节奏的 Web 生态中,如果把重复性的样板工作流统一为基于约定的单命令 CLI 操作,开发者生产力会显著提升。 提议的架构与实现(概念验证) 我们提议扩展 Microsoft.EntityFrameworkCore.Tools(dotnet-ef),按照 EF Core 现有的 System.CommandLine 结构增加两个统一命令:
- dotnet ef entity create <EntityName> [Properties...] [--context <DbContext>] [--migrate] 该命令负责脚手架行为:在 Entities 或 Models 目录中生成一个干净的 C# 实体类,并可选地解析内联属性定义,例如 Product Name:string Price:decimal。它还通过语法树检查(Roslyn)或设计时元数据,在 DbContext 中提供自动注册,定位目标 DbContext 并干净地注入 public DbSet 属性。如果传入 --migrate 标志,它会自动触发迁移和数据库更新流水线。 以下是该设计时服务的概念性实现片段:
public class EntityScaffolderService
public async Task CreateEntityAsync(string entityName, string dbContextPath, Dictionary<string, string> properties)
var propsCode = string.Join("\n ", properties.Select(p => $"public {p.Value} {p.Key} {{ get; set; }}"));
var entityCode = $@"namespace App.Entities;public class {entityName}{{ public int Id {{ get; set; }} {propsCode}}}";
Directory.CreateDirectory("Entities");
await File.WriteAllTextAsync($"Entities/{entityName}.cs", entityCode);
var contextCode = await File.ReadAllTextAsync(dbContextPath);
var dbSetDeclaration = $" public DbSet<{entityName}> {entityName}s => Set<{entityName}>();\n}}";
int lastBraceIndex = contextCode.LastIndexOf('}');
if (lastBraceIndex != -1)
contextCode = contextCode.Remove(lastBraceIndex, 1).Insert(lastBraceIndex, dbSetDeclaration);
await File.WriteAllTextAsync(dbContextPath, contextCode);
2. dotnet ef database sync <MigrationName> [--context <DbContext>]
它在 dotnet-ef 内部充当原子流水线包装器,依次执行 MigrationsScaffolder(migrations add)和 Migrator.Migrate()(database update),如果数据库更新失败,则回滚生成的迁移文件。
价值主张与 DevEx
这种方法通过消除跨 DbContext 和实体文件的重复手动编辑,减少了上下文切换。它提供原子工作流,将四步手动流程缩减为单个确定性的 CLI 命令,并降低了从约定优于配置生态迁移过来的开发者的上手难度,同时严格遵循 EF Core 的命名和设计模式。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。