如何修改EF Power Tools脚手架以生成不同目录的仓储类?
完全可行,通过扩展EF Power Tools的Handlebars模板,你可以实现同步生成仓储类,并自定义输出目录和命名空间,同时保证仓储类与实体类的数据一致性。具体步骤如下:
扩展Handlebars模板支持仓储类生成
EF Power Tools的CodeTemplates(Handlebars)允许自定义新增模板类型,你可以基于实体类生成时的元数据(如实体名称、属性、DbSet名称等)创建仓储类模板,确保两者数据完全匹配。新增仓储类模板文件
在项目的CodeTemplates/EFCore目录下(若无则手动创建),新增Repository模板文件夹,添加两个核心文件:Repository.hbs:仓储类主体模板,示例代码如下:using {{namespace}}.Entity; using {{namespace}}.DataContext; using System.Linq; namespace {{namespace}}.Repository { public class {{entityName}}Repository { private readonly {{dbContextName}} _context; public {{entityName}}Repository({{dbContextName}} context) { _context = context; } public IQueryable<{{entityName}}> GetAll() { return _context.{{entitySetName}}; } // 可按需添加更多增删改查方法 } }Repository.csproj.hbs:用于配置项目文件,确保生成的仓储类被正确纳入项目:<ProjectItem Include="{{outputPath}}/{{entityName}}Repository.cs"> <Generator>MSBuild:Compile</Generator> <LastGenOutput>{{entityName}}Repository.cs</LastGenOutput> </ProjectItem>
配置输出目录与命名空间
在CodeTemplates目录下创建或修改EntityFrameworkCore.ReverseEngineering.json配置文件,添加仓储类的路径和命名空间配置:{ "CodeTemplates": { "Entity": { "OutputDirectory": "Entity", "Namespace": "{{rootNamespace}}.Entity" }, "DbContext": { "OutputDirectory": "DataContext", "Namespace": "{{rootNamespace}}.DataContext" }, "Repository": { "OutputDirectory": "Repository", "Namespace": "{{rootNamespace}}.Repository" } } }这里的
{{rootNamespace}}会自动替换为你的项目根命名空间,无需手动修改。验证元数据一致性
仓储类模板中使用的{{entityName}}、{{entitySetName}}、{{dbContextName}}等变量,都是EF Power Tools在反向工程时自动传递的元数据,完全和实体类、DbContext生成时的数据源一致,不会出现数据不匹配的问题。测试生成流程
重新运行EF Power Tools的反向工程功能,工具会自动生成DbContext到DataContext目录、实体类到Entity目录、仓储类到Repository目录,所有文件的命名空间也会按照配置自动设置。
内容的提问来源于stack exchange,提问作者Davecz

