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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:05:09