首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在实体框架核心中构建具有复数DbContext属性名的DbSet?

如何在实体框架核心中构建具有复数DbContext属性名的DbSet?
EN

Stack Overflow用户
提问于 2015-12-31 08:22:45
回答 4查看 16.4K关注 0票数 24

我在Scaffold-DbContext中使用Package Manager Console命令为已存在的Server数据库创建和重新创建上下文和实体:

代码语言:javascript
复制
Scaffold-DbContext -provider EntityFramework.MicrosoftSqlServer -connection "my connection string"

它的工作原理非常完美,除了一件事:DbSet的财产名称以单数形式出现:

代码语言:javascript
复制
public partial class MyDbContext : DbContext
{
    public virtual DbSet<Request> Request { get; set; }
    public virtual DbSet<RequestHeader> RequestHeader { get; set; }
}

我更喜欢这些名字的复数形式(Requests等)。除了web搜索之外,我还检查了命令语法:

代码语言:javascript
复制
get-Help Scaffold-DbContext -detailed

却没有发现任何改变这种行为的方法。这是我的packages.config

代码语言:javascript
复制
<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第一个脚手架多元化。有关详细信息,请阅读下面的回答

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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

了解更多关于Bricelam Pluralizer的信息

票数 6
EN

Stack Overflow用户

发布于 2020-11-12 09:55:00

更新EntityFrameworkCore 5.0:TableNames现在在脚手架上自动多元化。(至少与-Provider Microsoft.EntityFrameworkCore.SqlServer)

票数 5
EN

Stack Overflow用户

发布于 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在脚手架上失败。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34543382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档