如何使用 EntityFramework 核心单数化实体



最近,我创建了一个 ASP.NET 核心(多平台(项目和一个类库,用于使用 VS2017 管理 SQL Server 数据库模型。

实际上我们在生产服务器中有一个数据库,我需要使用 dotnet ef dbcontext 脚手架 [参数] [选项] 生成类......命令行,但是我需要在创建 DbContext 类时将类名单数化。

拜托,需要帮助!谢谢

我已经找到了解决方案!

最好的解决方案是实现 IDesignTimeServices 接口并使用变形器工具,如 https://romiller.com/2017/02/10/ef-core-1-1-pluralization-in-reverse-engineer/中所述。

要实施此类解决方案,DesignTimeServiceDbContextWriterModelConfigurationRelationalScaffoldingModelFactory自定义类和Inflector类必须驻留在类所在的启动项目中Startup。使用包管理器控制台执行以下命令:

Install-Package Microsoft.EntityFrameworkCore.Design 

Install-Package Microsoft.EntityFrameworkCore.Tools

在基架过程中,实体框架设计搜索在项目中实现IDesignTimeServices的任何类Startup并执行其代码。

使用包管理器控制台根据需要执行以下命令替换值,请记住,如果需要将数据库优先进程中的模型类存储到其他项目(例如类库(中,请先在 Visual Studio 包管理器控制台中选择它:

Scaffold-DbContext -provider Microsoft.EntityFrameworkCore.SqlServer -connection "<connection string here...>" -Context MyDbContext -OutputDir "folder path" -StartupProject MyMainProject -Force

仅此而已,单一化和所需的任何自定义都可以完美地工作!

感谢您在评论中提供的帮助!

更新:

最近的实体框架核心 2.0 版本改进了奇异化/复数化过程,避免了 DbContextWriter、ModelConfiguration 和 RelationalScaffoldingModelFactory 实现的要求,通过一个名为 IPluralizer 的新接口使此过程更简单,该接口在实现方法复数和单数化的类中使用。

Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.Tools 的相同包安装是必需的,如果您希望在解决方案中使用此数据库,还需要Microsoft.EntityFrameworkCore.SqlServer,但现在实现 IDesignTimeServices 的类只需要该类以简单的方式实现 IPluralizer,如下所示:

public class CustomDesignTimeService : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
=> serviceCollection.AddSingleton<IPluralizer, CustomPluralizer>();
}

最后,CustomPluralizer 仅使用变形器工具类方法:

public class CustomPluralizer : IPluralizer
{
public string Pluralize(string identifier)
{
return Inflector.Pluralize(identifier) ?? identifier;
}
public string Singularize(string identifier)
{
return Inflector.Singularize(identifier) ?? identifier;
}
}

如果你不想使用变形器类,只需实现你自己的复数/单数化代码。

这就是我在新的 ASP.NET Core 2.0项目中必须做的所有事情。我希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新