c# - 如何首先使用数据库在 EF Core 中自定义实体名称大小写

标签 c# entity-framework .net-core entity-framework-core ef-database-first

我有一个现有的 EF6 代码库,我正在尝试将其移植到 EF Core,并且我有一个无法删除/修改的现有数据库。所以我使用以下命令从我的数据库中构建实体类

Scaffold-DbContext "MyConnectionString" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

它会生成 DbContext 和必要的实体。现在,他们似乎已经改变了很多命名约定(如何命名实体、属性和导航),而且新创建的实体与我现有的实体有很大不同!我找不到自定义这些约定的方法,所以我不得不在很多地方手动更改代码! (伤心!)

其中一个变化是:现在 EF 不会从表名中单数化类名。例如如果表名是'Accessories',之前的实体类是'Accessory',现在是'Accessories'!

为了解决这个问题,我使用了 IPluralizer界面并使用了Humanizer单数化实体类名称的库。

当我使用 Humanizer 库时,它会这样做

"Accessories".Singularize(); //produces "Accessory"
"XMLDetails".Singularize(); //produces "XMLDetail"

但是,在 EF Core 创建的最终实体类中,第二个属性名称变成了 Xmldetail,忽略了原来的大小写!有没有办法通过 EF Core 脚手架的过程保留原来的外壳?

注意:我正在使用 Microsoft.EntityFrameworkCore.SqlServer 版本 2.0.1 和一个针对 .NET Standard 2.0 的类库>.

最佳答案

经过一些研究,我从 GitHub 社区了解到,这是一个 known issueEF Core 2.0 中,它已经是 fixed在 repo 协议(protocol)中。 此修复计划与 EF Core 2.1 一起发布。

修复发布后,您可以使用 --use-database-names 标志告诉 EF 完全根据数据库名称生成名称,如下所示

Scaffold-DbContext "ConnString" Microsoft.EntityFrameworkCore.SqlServer -o Models --use-database-names

在此之前,您可以尝试以下工具之一,它提供比默认 EF Core 工具更多/更好的选项(我还没有实际使用过它们)

  1. EF Core Power Tools
  2. EntityFramework-Reverse-POCO-Code-First-Generator

关于c# - 如何首先使用数据库在 EF Core 中自定义实体名称大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48150867/

相关文章:

c# - 使用依赖注入(inject)通过构造函数反射调用c#类方法

c# - 单元测试中的 HostBuilder : HostContext. Configuration.GetSection 返回值 null

c# - 为什么 var.First() 会导致性能问题?

c# - 在 Docker 中使用 EF Core 对 SQLite DB 的每个查询都非常慢,除非有对 OpenConnection 的显式调用

entity-framework - EF Core 2.0 - 两端都需要 FK 的循环依赖

c# - 使用 ItExpr.IsNull<TValue> 而不是空参数值,因为它会阻止正确的方法查找

c# - HttpClient/.NET Core 不支持的媒体类型

C# List<string> 到带分隔符的字符串

c# - TypeScript:相当于 C# 的用于扩展类的通用类型约束?

c# - 如何在 VS 2013 上导出/导入断点?