entity framework核心从现有数据库创建模型

使用Entity Framework Core,您如何生成EF模型和实体?

根据ASP.NET核心 – 现有数据库 Microsoft文章,您需要在程序包管理器控制台中运行类似这样的命令:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models 

这使您无法控制要导入的表或视图。 是否有可能这是现在使用EF Core对数据库进行逆向工程并创建EF模型和实体的唯一方法,与现在使用完整entity framework的方式相比,这种进展有多大?

在Entity Framework Core中没有办法做到这一点。 阅读此处的文档: https : //docs.microsoft.com/en-us/ef/efcore-and-ef6/features

我知道这个问题有点陈旧,但我认为这对于遇到同样问题的人来说非常有用。

如果我已正确理解您的问题,您需要指定应生成哪些表。 如果将-Tables参数添加到命令中,则应该可以。

这是我用来生成3个数据库表的命令(在包管理器控制台中):

 Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context NorthwndContext -Tables Products,Categories,Suppliers -Force 

如您所见,我使用Northwnd-Database并仅生成“产品,类别和供应商”表。 显然,您可以添加更多表,只需用逗号分隔即可。

如果您不知道,可以通过转到数据连接(服务器资源管理器),单击要添加的数据库并在右侧(属性)获取DatabaseName,您会看到一个属性(名称)。 对我来说这是“NORTHWND.MDF”。

我使用-Force来覆盖我已经创建的任何模型。

您可以使用-DataAnnotations来获取带注释的模型。 否则,您将获得Fluent模型配置。

PS:我只尝试过使用ASP.NET Core 2和Entity Framework Core 2.0.0。

我的情况是我有一个带有DbContexts的.net 4.5+类库。

这些DbContexts是使用“现有数据库中的代码优先”向导从现有数据库创建的。 EF Core似乎缺少此向导。

要从与EF Core兼容的现有数据库创建新的Code First DbContext ,我在这里松散地遵循了指南

我的步骤:

  • 创建了一个新的核心类库

  • 添加了nuget包Microsoft.EntityFrameworkCore

  • 添加了nuget包Microsoft.EntityFrameworkCore.Tools
  • 添加了nuget包Microsoft.EntityFrameworkCore.SqlServer
  • 添加了nuget包Microsoft.EntityFrameworkCore.SqlServer.Design

  • 打开nuget Package Manager控制台

  • 输入命令

     Scaffold-DbContext "data source=MYSQLDBSERVER\MYSQLINSTANCE;initial catalog=MYDB;integrated security=True;MultipleActiveResultSets=True;" 
  • 作为提供者进入

     Microsoft.EntityFrameworkCore.SqlServer 

请注意,使用非Core项目时,您可能会遇到nuget Package Manager控制台的问题。 我通过创建一个新的Core类库而不是.net文件库来避免这个问题。

创建上下文后,您可以像在Code First中一样编辑它,例如,您可以删除不想使用的表。

您还可以应用骗子的方法:打开VS2015,创建一个与实际项目同名的新类库,然后运行实体数据模型向导。

完成后,复制并粘贴到.net核心项目中。 结果代码需要进行一些调整,但这很简单。

但是,如上所述运行scaffold命令是一种更好的解决方案。