.net 实体框架核心从现有数据库创建模型

rvpgvaaj  于 2022-12-14  发布在  .NET
关注(0)|答案(6)|浏览(135)

使用EntityFrameworkCore,如何生成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模型和实体的唯一方法?与多年来使用完整的实体框架完成此操作的方式相比,这一进展如何?

lkaoscv7

lkaoscv71#

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

t1rydlwq

t1rydlwq2#

你也可以用骗子的方法:打开VS2015,创建一个与实际项目同名的新类库,然后运行实体数据模型向导。
一旦你完成了,复制并粘贴到你的.net核心项目中。需要对生成的代码做一些调整,但这是微不足道的。
但是,如上所述运行scaffold命令是更好的解决方案。

iqih9akk

iqih9akk3#

从现有MS SQL数据库搭建DbContext

在VS 2022和dotnet 7及以下版本中面临的问题解决方案对我有效
1.在API/MVC/WEB/Console应用程序中安装以下4个包并重建应用程序

  • 微软实体框架核心设计-版本7.0*
  • 微软实体框架核心----版本7.0*
  • 微软实体框架核心服务器----版本7.0*
  • 微软实体框架核心工具--版本7.0*

1.在程序包管理器控制台中运行以下命令:

注意:在连接字符串中给予正确的数据源、数据库名称、ID和密码

脚手架-DbContext“数据源=本地主机;初始目录=数据库名称;集成安全性=True;信任服务器证书=真;用户ID=sa;密码=*****”Microsoft.实体框架核心.SqlServer -输出目录模型
1.如果发生任何错误,请确保连接字符串中存在“TrustServerCertificate=true”属性,然后重新启动Visual Studio并重试scaffold命令
我尝试了很多次1)和2)点,但都失败了,但当我应用3)点,以及它为我工作

nx7onnlm

nx7onnlm4#

我知道这个问题有点老了,但我认为它对遇到同样问题的人很有用。
如果我没理解错你的问题,你想指定生成哪些表,如果你在命令中添加-Tables参数应该就可以了。
下面是我用来生成3个数据库表的命令(在Package-Manager控制台中):

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

如您所见,我使用Northwnd数据库,只生成表“Products,Categories and Suppliers”。显然,您可以添加更多的表,只需要用逗号分隔它们。
如果你不知道,你可以通过进入数据连接(服务器资源管理器),点击你想添加的数据库,在右边(属性),你会看到一个属性(名称)。
我使用-Force覆盖我已经创建的所有Model。
您可以使用-DataAnnotations来获取带注解的模型,否则,您将获取Fluent模型配置。
附言:我只在ASP.NET核心2和实体框架核心2.0.0上试过。

dgenwo3n

dgenwo3n5#

我的情况是,我有一个.net 4.5+类库,其中包含DbContexts。
这些DbContext是使用“先从现有数据库编码”向导从现有数据库创建的。EF Core中似乎缺少此向导。

要从与EF Core兼容的现有数据库创建新的Code First DbContext,我大致遵循了here指南

我的步骤:

  • 创建了新的核心类库
  • 添加了核心包 Microsoft.EntityFrameworkCore
  • 添加了核心包 Microsoft.EntityFrameworkCore.Tools
  • 添加了核心包 Microsoft.EntityFrameworkCore.SqlServer
  • 添加了核心软件包 Microsoft.EntityFrameworkCore.SqlServer.Design
  • 已打开nuget软件包管理器控制台
  • 已输入command
Scaffold-DbContext "data source=MYSQLDBSERVER\MYSQLINSTANCE;initial catalog=MYDB;integrated security=True;MultipleActiveResultSets=True;"
  • 作为提供者输入
Microsoft.EntityFrameworkCore.SqlServer

请注意,当使用非核心项目时,您可能会遇到nuget Package Manager控制台的问题。我通过创建一个新的核心类库而不是.net类库来避免这个问题。
创建上下文后,您可以像在Code First中一样编辑它,例如,您可以删除不想使用的表。

yh2wf1be

yh2wf1be6#

那些想要使用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

终于...

dotnet ef dbcontext scaffold "Server=servername\instancename;Database=My_Database;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

这将在项目的models文件夹中创建必要的模型和db模式上下文。
现在,您可以通过应用以下命令轻松生成CRUD代码:

dotnet aspnet-codegenerator controller -name <MyNewController> -m <ModelName> -dc <MyDbContext> --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries

MyNewController更改为所需的控制器名称,将ModelName更改为要作为目标的models文件夹中的模型名称,最后将MyDbContext更改为Models文件夹中可用的系统生成的上下文文件名称
但是在运行该命令之前,请确保您已经在项目文件夹中appsettings.jsonstartup.cs文件中进行了必要的更改

应用程序设置.json添加到行后

“允许的主机”:“*",

"ConnectionStrings": {
    "MyDbConnection": "Server=servername\\instancename;Database=My_Database;Trusted_Connection=True;"
  }

startup.cs文件添加到该行之前

服务.添加Mvc().设置兼容版本(兼容版本.版本_2_2);

services.AddDbContext<SwiftRbs_LocalContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("MyDbConnection")));

好好享受吧!!

相关问题