Asp.net core mvc 如何防止Entity Framework Core 2.0重命名生成类中的表和列(数据库优先)

Asp.net core mvc 如何防止Entity Framework Core 2.0重命名生成类中的表和列(数据库优先),asp.net-core-mvc,entity-framework-core,Asp.net Core Mvc,Entity Framework Core,我一直在从事一个ASP.NET MVC Core 2.0项目(针对.NET Core 2.0),该项目需要使用实体框架。要使用的数据库已存在,我无法更改它。我已经添加了EntityFrameworkCore2.0所需的所有引用 但是,当我从Nuget Package Manager控制台运行下面的scaffolding命令时,我得到了与原始表相比大小写不同的表的POCO模型类。除其他差异外,名称中带有下划线的列由不带下划线的属性表示 在生成POCO模型类时,如何强制脚手架保留所有表名和列名 sc

我一直在从事一个ASP.NET MVC Core 2.0项目(针对.NET Core 2.0),该项目需要使用实体框架。要使用的数据库已存在,我无法更改它。我已经添加了EntityFrameworkCore2.0所需的所有引用

但是,当我从Nuget Package Manager控制台运行下面的scaffolding命令时,我得到了与原始表相比大小写不同的表的POCO模型类。除其他差异外,名称中带有下划线的列由不带下划线的属性表示

在生成POCO模型类时,如何强制脚手架保留所有表名和列名

scaffold命令的示例。 Scaffold DbContext“Server=Info;Database=Vehicles;Trusted_Connection=True;”Microsoft.EntityFrameworkCore.SqlServer-OutputDir Models-force


(第一次发布到堆栈溢出。感谢您的帮助。)

使用
-UseDatabaseNames
选项旨在保持名称与数据库中的名称完全相同(如果名称不是有效的C#标识符,则只进行少量更正)


不幸的是,该选项在2.0版(问题)中的
Scaffold DbContext
命令中被省略,并且没有应用于属性名(问题)。您必须等待EF Core 2.1按预期使用它。如果您渴望更快地尝试,您可以随时使用。

解决方案:您必须更新到。
Net Core 2.1+
,然后您可以运行
Scaffold DbContext-UseDatabaseNames
。我已经在NET2.1RC中尝试过这个方法,现在可以使用了。

我强烈建议您使用正在生成的名称。它们遵循C#推荐的标准这难道不意味着我需要重命名数据库中的表及其列,以匹配POCO类中生成的名称吗?否则,我相信我的DbContext SaveChanges()会失败。@DavidG问题是,我的一些表的名称末尾有字母“s”。表名不是复数形式,例如“bas”。但是EF创建了一个模型“ba”,删除了尾随的s。在这种情况下,它与对流无关。旧的EF for.Net framework可以选择不使用所有名称,而是创建模型1:1。(我知道这是一个老帖子,但它可能会导致知道这个问题的答案)好的,我用-NoPluralize选项解决了我的问题。尽管这听起来不像是我问题的解决方案,因为我希望有一种叫做“无奇异化”的东西,因为我不想让它把我的单词变成单格形式。当EF Core 2.1问世时,当我使用选项-UseDatabaseNames时,表名和列名都会被保留(如您所指出的,有轻微的更正)?从您的回答中,我很清楚该选项将保留表名,但我不确定您指的是列名还是列名。是的,它将在版本2.1中同时保留表名和属性名。在2.0中,dotnet ef dbcontext scaffold--use database names命令将只保留表名。这是个好消息。这将使我有可能创建我需要的MVC/EF项目作为“数据库优先”。非常感谢您对我的问题的回答@bricelam请详细说明我如何使用夜间版本,确保选择了Include prerelease,并安装软件包的夜间版本。@CodeF0x,键入:“Sasterabasenames”=>“UseDatabaseNames”