【问题标题】:Entity Framework database-first approach Pascal caseEntity Framework 数据库优先方法 Pascal 案例
【发布时间】:2020-02-29 05:09:21
【问题描述】:

我正在使用 EF Core 3.0 和数据库优先方法从 SQL Server 数据库中访问 Scaffold-DbContext

dotnet ef dbcontext 
       scaffold "Server=***;Database=***;User Id=***;Password=****;" Microsoft.EntityFrameworkCore.SqlServer 
       -o Models -c "MyContext" --project=Data

生成模型时,它使用指定的变量命名,例如:

如果数据库中的列调用例如

  • ISBuy 变为 Isbuy
  • CategoryID => CategoryId

这真的错过了我的系统......

有没有一种方法可以防止转换和生成与数据库相同的变量名,或者有一种超级神奇的方法可以防止这些并像 EF Core 那样使用驼峰式大小写?

我不是在谈论从 API 返回的对象,因为我找到了很多针对这种情况的解决方案,但从来没有这个解决方案。

谢谢

【问题讨论】:

  • 试试usedatabasenames参数

标签: .net .net-core entity-framework-core asp.net-core-webapi camelcasing


【解决方案1】:

在您的 .NET Core CLI 中添加 --use-database-names

dotnet ef dbcontext 
   scaffold "Server=***;Database=***;User Id=***;Password=****;" Microsoft.EntityFrameworkCore.SqlServer 
   -o Models -c "MyContext" --project=Data --use-database-names

参考

https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet#dotnet-ef-dbcontext-scaffold

--使用数据库名称
使用与数据库中出现的完全相同的表名和列名。如果省略此选项,则数据库名称将更改为更符合 C# 名称样式约定。

【讨论】:

    【解决方案2】:

    在 PowerShell 中,您可以使用 UseDatabaseNames 选项(带有单个破折号)作为 a Scaffold-DbContext call 的一部分,以保持数据库架构中使用的大小写。

    Scaffold-DbContext "Server=.\SERVERNAME;Database=DBNAME;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir ENTITIESDIR -Context "NameContext" -UseDatabaseNames
    

    【讨论】:

    • 仅代码答案被认为是不好的做法。请添加一些有关这些解决方案如何解决问题的详细信息。请看stackoverflow.com/help/how-to-answer
    • @SuitBoyApps 已修复。
    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 2013-09-23
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2020-06-15
    相关资源
    最近更新 更多