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

.NET Core EF脚手架PostgreSQL时如何将Schema加入命名空间并存对应子文件夹

EF Core 多Schema反向工程按Schema生成分文件夹及对应命名空间解决方案

这个需求完全可以实现,两种常用实现方式如下:

方案一:使用EF Core Power Tools(可视化操作,无需写代码)

这是效率最高的方案,是微软官方维护的Visual Studio扩展,专门用于简化EF Core数据库优先的开发流程:

  1. 安装EF Core Power Tools扩展后重启Visual Studio
  2. 右键目标项目,选择 EF Core Power Tools -> Reverse Engineer
  3. 按引导选择PostgreSQL数据库连接,进入配置页后勾选两个选项:
    • Use schema namespaces(命名空间自动包含Schema名)
    • Use schema folders(自动按Schema生成子文件夹存储实体类)
  4. 配置实体类根命名空间、根输出文件夹后执行生成即可,最终生成的结构完全符合你给出的示例要求。

方案二:自定义EF Core脚手架T4模板(高度定制化,适合复杂需求)

如果你需要更灵活的生成规则,可以修改官方脚手架模板:

  1. 先安装EF Core模板包:
dotnet new install Microsoft.EntityFrameworkCore.Templates
  1. 在项目根目录执行命令导出默认模板:
dotnet new ef-templates

执行完成后项目根目录会生成CodeTemplates/EFCore文件夹,包含实体类、DbContext的生成模板。
3. 修改EntityType.t4模板:

  • 从模板上下文获取当前表的Schema名称:var schema = entityType.GetSchema();
  • 修改命名空间生成逻辑,在原根命名空间后拼接Schema名(可自行添加首字母大写逻辑符合C#规范)
  • 修改文件输出路径规则,将Schema名作为子文件夹层级
  1. 修改DbContext.t4模板,确保实体的映射配置自动带上Schema参数:
entity.ToTable("<表名>", "<Schema名>");

配置完成后执行常规的dotnet ef dbcontext scaffold命令即可生成符合要求的实体结构。


补充说明

你之前尝试的两种方式无效的原因:

  • 连接字符串设置Search Path仅影响数据库运行时的Schema查找优先级,不会干预EF Core脚手架的生成逻辑
  • 数据库名后加.Schema是错误用法,EF Core脚手架本身不支持这种指定单个Schema的语法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 02:18:04