Dea*_*uga 20 .net c# entity-framework
使用Entity Framework Core,您如何生成EF模型和实体?
根据ASP.NET核心 - 现有数据库 Microsoft文章,您需要在程序包管理器控制台中运行如下命令:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Run Code Online (Sandbox Code Playgroud)
这使您无法控制要导入的表或视图.是否有可能这是现在使用EF Core对数据库进行逆向工程并创建EF模型和实体的唯一方法,与现在使用完整实体框架的方式相比,这种进展有何进展?
小智 48
我知道这个问题有点陈旧,但我认为这对于遇到同样问题的人来说非常有用.
如果我已正确理解您的问题,您需要指定应生成哪些表.如果将-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
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用Northwnd-Database并仅生成"产品,类别和供应商"表.显然,您可以添加更多表,只需用逗号分隔即可.
如果您不知道,可以通过转到数据连接(服务器资源管理器),单击要添加的数据库并在右侧(属性)获取DatabaseName,您会看到一个属性(名称).对我来说这是"NORTHWND.MDF".
我曾经-Force覆盖我已经创建的任何模型.
您可以使用-DataAnnotations获取带注释的模型.否则,您将获得Fluent模型配置.
PS:我只尝试过使用ASP.NET Core 2和Entity Framework Core 2.0.0.
小智 8
在Entity Framework Core中没有办法做到这一点.阅读此处的文档:https: //docs.microsoft.com/en-us/ef/efcore-and-ef6/features
小智 8
那些想要使用 dotnet core 将 Sql 数据库架构转换为 EF core 的人请按照以下步骤操作:
一个接一个地运行所有命令(对于那些想要创建新项目的人的第一个命令,否则您可以忽略它,只需从您的项目根文件夹运行其他给定的命令)
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
Run Code Online (Sandbox Code Playgroud)
最后...
dotnet ef dbcontext scaffold "Server=servername\instancename;Database=My_Database;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
Run Code Online (Sandbox Code Playgroud)
这将在项目的模型文件夹中创建数据库架构的必要模型和上下文。
现在,您可以通过应用以下命令轻松生成CRUD代码:
dotnet aspnet-codegenerator controller -name <MyNewController> -m <ModelName> -dc <MyDbContext> --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
Run Code Online (Sandbox Code Playgroud)
将MyNewController更改为您想要的控制器名称,将ModelName更改为您想要定位的模型文件夹中的模型名称,最后更改 MyDbContext使用 Models 文件夹中可用的系统生成的上下文文件名
但在运行该命令之前,请确保您已对项目文件夹中的appsettings.json和startup.cs文件进行了必要的更改
appsettings.json 在行后添加
"AllowedHosts": "*",
"ConnectionStrings": {
"MyDbConnection": "Server=servername\\instancename;Database=My_Database;Trusted_Connection=True;"
}
Run Code Online (Sandbox Code Playgroud)
startup.cs文件在该行之前添加
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddDbContext<SwiftRbs_LocalContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyDbConnection")));
Run Code Online (Sandbox Code Playgroud)
享受!!
我的情况是我有一个带有DbContexts的.net 4.5+类库.
这些DbContexts是使用"现有数据库中的代码优先"向导从现有数据库创建的.EF Core似乎缺少此向导.
要从与EF Core兼容的现有数据库创建新的Code First DbContext,我在这里松散地遵循了指南
我的步骤:
创建了一个新的核心类库
添加了nuget包Microsoft.EntityFrameworkCore
添加了nuget包Microsoft.EntityFrameworkCore.SqlServer.Design
打开nuget Package Manager控制台
输入命令
Scaffold-DbContext "data source=MYSQLDBSERVER\MYSQLINSTANCE;initial catalog=MYDB;integrated security=True;MultipleActiveResultSets=True;"
Run Code Online (Sandbox Code Playgroud)作为提供者进入
Microsoft.EntityFrameworkCore.SqlServer
Run Code Online (Sandbox Code Playgroud)请注意,使用非Core项目时,您可能会遇到nuget Package Manager控制台的问题.我通过创建一个新的Core类库而不是.net文件库来避免这个问题.
创建上下文后,您可以像在Code First中一样编辑它,例如,您可以删除不想使用的表.
| 归档时间: |
|
| 查看次数: |
23025 次 |
| 最近记录: |