我在Scaffold-DbContext中使用Package Manager Console命令为已存在的Server数据库创建和重新创建上下文和实体:
Scaffold-DbContext -provider EntityFramework.MicrosoftSqlServer -connection "my connection string"它的工作原理非常完美,除了一件事:DbSet的财产名称以单数形式出现:
public partial class MyDbContext : DbContext
{
public virtual DbSet<Request> Request { get; set; }
public virtual DbSet<RequestHeader> RequestHeader { get; set; }
}我更喜欢这些名字的复数形式(Requests等)。除了web搜索之外,我还检查了命令语法:
get-Help Scaffold-DbContext -detailed却没有发现任何改变这种行为的方法。这是我的packages.config
<packages>
<package id="EntityFramework.Commands" version="7.0.0-rc1-final" targetFramework="net46" />
<package id="EntityFramework.Core" version="7.0.0-rc1-final" targetFramework="net46" />
...
</packages>如何在脚手架时多个DbSet名称?
更新2017-04:EntityFrameworkCore1.1中现在可以实现 DB第一个脚手架多元化。有关详细信息,请阅读下面的回答。
发布于 2020-02-14 13:55:30
简短回答
1.安装软件包
Install-Package Bricelam.EntityFrameworkCore.Pluralizer
2.运行Scaffold-DbContext命令
Scaffold-DbContext -Connection "Server=<server>;Database=<dbname>;user id=<userid>;password=<pwd>;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Data/EFModels/
较长的答覆:
正如@natemcmaster's答案的注释中@KalinKrastev所指出的那样。
在控制台(PMC)或
dotnet add package Bricelam.EntityFrameworkCore.Pluralizer
使用Dotnet。
安装软件包后,只需使用常规的Scaffold-DbContext命令即可。
Scaffold-DbContext -Connection "Server=<server>;Database=<dbname>;user id=<userid>;password=<pwd>;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Data/EFModels/ -Force
发布于 2020-11-12 09:55:00
更新EntityFrameworkCore 5.0:TableNames现在在脚手架上自动多元化。(至少与-Provider Microsoft.EntityFrameworkCore.SqlServer)
发布于 2017-04-10 10:32:33
在EF Core 1.1中,多元化是可能的。作为Rowan 在其博客中进行了描述,您需要安装Inflector并实现IDesignTimeServices来控制脚手架时的多元化。但是,请注意:
我们将这些服务放入*.internal名称空间,并保留在任何时候破坏API的权限。
这就是为什么没有将完整的代码示例复制到这里。这个答案不被接受的原因是相同的-我宁愿等到我们得到一个稳定的API。
另一个你应该考虑的问题--这个解决方案依赖于提供者。它适用于Server (我对它进行了测试)。另一个DBMS提供者可能还不支持这个API。例如,当使用自定义Npgsql.EntityFrameworkCore.PostgreSQL时,最新的IDesignTimeServices 1.1.0在脚手架上失败。
https://stackoverflow.com/questions/34543382
复制相似问题