.NET 8控制台程序实现EntityFramework SQL Server Scaffolding
.NET 8控制台应用实现EF Core SQL Server逆向工程(Scaffolding)
实现方案
要在控制台应用中直接执行逆向工程,需调用EF Core的设计时API,以下是完整的代码实现及配置说明:
1. 确认依赖包
你已引用的NuGet包完全满足需求,确保版本一致即可:
Microsoft.EntityFrameworkCore.Design Version=8.0.4 Microsoft.EntityFrameworkCore.SqlServer Version=8.0.4 Microsoft.EntityFrameworkCore.Tools Version=8.0.4
2. 核心代码实现
在控制台应用的Program.cs中替换为以下代码,根据你的实际需求修改参数:
using Microsoft.EntityFrameworkCore.Design; using Microsoft.EntityFrameworkCore.Scaffolding; using Microsoft.EntityFrameworkCore.SqlServer.Design; using Microsoft.Extensions.DependencyInjection; // 配置逆向工程核心参数 var sqlServerOptions = new SqlServerScaffoldingOptions(); var scaffoldingOptions = new ScaffoldingModelOptions { // 是否用数据注解替代Fluent API配置实体 UseDataAnnotations = false, // 生成的DbContext类名称 DbContextClassName = "AppDbContext", // DbContext文件输出目录(支持相对/绝对路径) DbContextOutputDir = "./Data", // 实体类的命名空间 Namespace = "MyConsoleApp.Entities", // DbContext的命名空间 ContextNamespace = "MyConsoleApp.Data", // 指定要生成的表(空列表则生成所有表) Tables = new List<string> { "Users", "Orders" }, // 排除不需要生成的表 ExcludeTables = new List<string> { "SystemLogs" }, // 是否启用可空引用类型 UseNullableReferenceTypes = true, // 是否生成视图对应的实体类 IncludeViews = false }; // 构建服务容器并注入EF Core设计时服务 var services = new ServiceCollection(); services.AddEntityFrameworkDesignTimeServices(); new SqlServerDesignTimeServices().ConfigureDesignTimeServices(services); using var serviceProvider = services.BuildServiceProvider(); var modelScaffolder = serviceProvider.GetRequiredService<IModelScaffolder>(); // 执行逆向工程 var scaffoldingResult = modelScaffolder.ScaffoldModel( connectionString: "Server=.;Database=YourDatabaseName;Trusted_Connection=True;TrustServerCertificate=True;", databaseOptions: sqlServerOptions, scaffoldingOptions: scaffoldingOptions); // 将生成的代码写入本地文件 foreach (var file in scaffoldingResult.Files) { var directory = Path.GetDirectoryName(file.Path); if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) { Directory.CreateDirectory(directory); } File.WriteAllText(file.Path, file.Code); Console.WriteLine($"已生成文件:{file.Path}"); } Console.WriteLine("逆向工程执行完成!");
3. 参数关键说明
- connectionString: 替换为你的SQL Server连接字符串,SQL Server认证需补充
User ID=xxx;Password=xxx;。 - DbContextOutputDir: 若使用相对路径,运行程序时需确保工作目录为项目根目录,否则建议使用绝对路径。
- Tables/ExcludeTables: 二选一配置即可,无需过滤时可设为
null或空列表。 - IncludeViews: 设置为
true可生成数据库视图对应的实体类。
4. 运行注意事项
- 运行控制台应用前,确保当前用户有目标数据库的读取权限。
- 若生成的代码存在编译警告,可根据需求调整
UseNullableReferenceTypes等参数。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

