使用Entity Framework Core,您如何生成EF模型和实体?
根据ASP.NET Core - Existing Database Microsoft文章,您需要在程序包管理器控制台中运行如下命令:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
这使您无法控制要导入的表或视图。是否有可能这是现在使用EF Core对数据库进行逆向工程并创建EF模型和实体的唯一方法,与现在使用完整实体框架的方式相比,这种进展有多大?
答案 0 :(得分:42)
我知道这个问题有点陈旧,但我认为这对于遇到同样问题的人来说非常有用。
如果我已正确理解您的问题,您需要指定应生成哪些表。
如果将-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。
答案 1 :(得分:7)
在Entity Framework Core中无法做到这一点。 阅读此处的文档: https://docs.microsoft.com/en-us/ef/efcore-and-ef6/features
答案 2 :(得分:5)
我的情况是我有一个带有DbContexts的.net 4.5+类库。
这些DbContexts是使用“现有数据库中的代码优先”向导从现有数据库创建的。 EF Core似乎缺少此向导。
要从与EF Core兼容的现有数据库创建新的Code First DbContext,我会松散地遵循指南here
我的步骤:
创建了新的核心类库
添加了nuget包 Microsoft.EntityFrameworkCore
添加了nuget包 Microsoft.EntityFrameworkCore.SqlServer.Design
打开nuget Package Manager控制台
输入command
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中一样正常编辑它,例如您可以删除不想使用的表格。
答案 3 :(得分:2)
您还可以应用作弊者的方法:打开VS2015,创建一个与实际项目同名的新类库,然后运行实体数据模型向导。
完成后,复制并粘贴到.net核心项目中。结果代码需要进行一些调整,但这很简单。
但是,如上所述运行scaffold命令是一种更好的解决方案。
答案 4 :(得分:-1)
想要使用dotnet核心将Sql数据库模式转换为EF核心的人员请遵循以下步骤:
一个接一个地运行所有命令(对于要创建新项目的用户来说,第一个命令是其他命令,否则您可以忽略该命令,而只是从项目根文件夹中运行其他给定命令)
dotnet new mvc -o <ProjectName>
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet tool install --global dotnet-aspnet-codegenerator
最后...
dotnet ef dbcontext scaffold "Server=servername\instancename;Database=My_Database;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
这将在项目的models文件夹内创建数据库模式的必要模型和上下文。
现在,您可以通过应用以下命令轻松生成 CRUD 代码:
dotnet aspnet-codegenerator controller -name <MyNewController> -m <ModelName> -dc <MyDbContext> --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
使用所需的控制器名称更改 MyNewController ,使用要定位的models文件夹中的模型名称更改 ModelName ,最后更改 MyDbContext 系统生成的上下文文件名可以在“模型”文件夹中找到
但是在运行该命令之前,请确保已在项目文件夹中的 appsettings.json 和 startup.cs 文件中进行了必要的更改
appsettings.json 在行后添加
“ AllowedHosts”:“ *”,
"ConnectionStrings": {
"MyDbConnection": "Server=servername\\instancename;Database=My_Database;Trusted_Connection=True;"
}
startup.cs 文件添加到该行之前
services.AddMvc()。SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddDbContext<SwiftRbs_LocalContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyDbConnection")));
享受!