EFCore Scaffold-DbContext 可以生成自定义模型名称吗?

Posted

技术标签:

【中文标题】EFCore Scaffold-DbContext 可以生成自定义模型名称吗?【英文标题】:Can EFCore Scaffold-DbContext generate custom Model names? 【发布时间】:2020-03-17 17:46:37 【问题描述】:

我正在使用具有数据库优先方法的 EFCore 3.0,并且想知道如何生成 Model 名称。首先,我使用-DataAnnotations-Force 开关,命令看起来像这样:

Scaffold-DbContext "data source=foo;initial catalog=bar;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework;Connection Timeout=300;Application Name=FooBar" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities/Bar -ContextDir DbContexts -Context BarContext -Tables "Cars", "Makes", "Types" -DataAnnotations -Force

Scaffold-DbContext 创建的 C# 模型与数据库中的表完全相同。所以它将创建 3 个类:Cars.csMakes.csTypes.cs

我的问题是:我们可以自定义这些名称吗?我可以生成类Auto.cs 而不是Cars.cs 吗?

这个任务看起来很琐碎,因为从人类的角度来看就是这个算法:

    运行Scaffold-DbContext

    重构-重命名Cars.cs类为Auto.cs

    完成。最终结果:

    [Table("cars")]
    public partial class Auto
    
        public Auto()
        
        
    
    
    

所以如果我的第一个问题的答案是“否”。我的后续问题是:我们能以某种方式自动化它吗?这真的不是一个复杂的任务。如果我们将命令行更改为:

-Tables "Cars" as "Auto", "Makes" as "Make", "Types" as "Type

有没有办法改变/覆盖Scaffold-DbContext 命令?有没有人这样做过?谢谢!

【问题讨论】:

【参考方案1】:

使用-NoPluralize,像这样:

Scaffold-DbContext "data source=foo;initial catalog=bar;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework;Connection Timeout=300;Application Name=FooBar" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities/Bar -ContextDir DbContexts -Context BarContext -Tables "Cars", "Makes", "Types" -DataAnnotations -Force -NoPluralize

【讨论】:

以上是关于EFCore Scaffold-DbContext 可以生成自定义模型名称吗?的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 2.0中如何手动映射数据库的视图为实体

Scaffold-DbContext:找不到命令

如何使用 ef core 对具有原始表名和属性的数据库进行反向工程

尝试使用 Scaffold-DbContext 的问题

EF Core DB first - 我需要索引定义吗?

在 Blazor .net 核心应用程序中查找连接字符串时出错