如何在Entity Framework Core中使用多个DbSet属性名称来构建DbContext?

Ily*_*kov 15 c# sql-server entity-framework entity-framework-core visual-studio-2015

我使用Scaffold-DbContextcommand in Package Manager Console为现有的SQL Server数据库创建和重新创建上下文和实体:

Scaffold-DbContext -provider EntityFramework.MicrosoftSqlServer -connection "my connection string"
Run Code Online (Sandbox Code Playgroud)

除了一件事之外,它的作用非常完美:它DbSet有单数形式的属性名称:

public partial class MyDbContext : DbContext
{
    public virtual DbSet<Request> Request { get; set; }
    public virtual DbSet<RequestHeader> RequestHeader { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢这些名字是复数形式(Requests等).除了网页搜索,我检查了命令语法:

get-Help Scaffold-DbContext -detailed
Run Code Online (Sandbox Code Playgroud)

并没有发现改变这种行为.这是我的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>
Run Code Online (Sandbox Code Playgroud)

如何DbSet在脚手架上复数名称?

更新2017-04: DB现在可以在Entity Framework Core 1.1中实现第一个脚手架复数化.请阅读下面的答案了解详情.

Cri*_*oli 7

您可以使用此命令:

Scaffold-DbContext "connectionString" Microsoft.EntityFrameworkCore.SqlServer -o Models -UseDatabaseNames -NoPluralize -force
Run Code Online (Sandbox Code Playgroud)

您之前有 nuget 包:

Microsoft.EntityFrameworkCore.Design - version 5
Microsoft.EntityFrameworkCore - version 5
Microsoft.EntityFrameworkCore.SqlServer -version 5
Microsoft.EntityFrameworkCore.Tools - version 5
Microsoft.EntityFrameworkCore.Relational -version 5
Run Code Online (Sandbox Code Playgroud)

  • -NoPluralize 会添加复数吗? (3认同)

Ham*_*ada 5

简答

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/


长答案:

正如@KalinKrastev@natemcmaster回答的评论中指出的那样。EF Core 中的复数可以使用名为的包Bricelam.EntityFrameworkCore.Pluralizer进行安装,该包可以使用

在包管理器控制台 (PMC) 或

dotnet add package Bricelam.EntityFrameworkCore.Pluralizer

使用 Dotnet cli。

安装软件包后,只需使用常规Scaffold-DbContext命令即可。

Scaffold-DbContext -Connection "Server=<server>;Database=<dbname>;user id=<userid>;password=<pwd>;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Data/EFModels/ -Force

查看更多关于 Bicelam 的 Pluralizer


Ren*_*ené 5

EntityFrameworkCore 5.0更新:表名现在在脚手架上自动复数。(至少使用 -Provider Microsoft.EntityFrameworkCore.SqlServer)