使用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模型和实体的唯一方法,与现在使用完整实体框架的方式相比,这种进展有何进展?
我知道这个问题有点陈旧,但我认为这对于遇到同样问题的人来说非常有用.
如果我已正确理解您的问题,您需要指定应生成哪些表.如果将-Tables
参数添加到命令,应该可以.
这是我用来生成3个数据库表的命令(在包管理器控制台中):
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;" -Provider 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.
在Entity Framework Core中没有办法做到这一点.阅读此处的文档:https: //docs.microsoft.com/en-us/ef/efcore-and-ef6/features
我的情况是我有一个带有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中一样编辑它,例如,您可以删除不想使用的表.