使用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模型和实体的唯一方法?与多年来使用完整的实体框架完成此操作的方式相比,这一进展如何?
6条答案
按热度按时间lkaoscv71#
在Entity Framework Core中无法做到这一点。请阅读此处的文档:https://learn.microsoft.com/en-us/ef/efcore-and-ef6/features
t1rydlwq2#
你也可以用骗子的方法:打开VS2015,创建一个与实际项目同名的新类库,然后运行实体数据模型向导。
一旦你完成了,复制并粘贴到你的.net核心项目中。需要对生成的代码做一些调整,但这是微不足道的。
但是,如上所述运行scaffold命令是更好的解决方案。
iqih9akk3#
从现有MS SQL数据库搭建DbContext
在VS 2022和dotnet 7及以下版本中面临的问题解决方案对我有效
1.在API/MVC/WEB/Console应用程序中安装以下4个包并重建应用程序
1.在程序包管理器控制台中运行以下命令:
注意:在连接字符串中给予正确的数据源、数据库名称、ID和密码
脚手架-DbContext“数据源=本地主机;初始目录=数据库名称;集成安全性=True;信任服务器证书=真;用户ID=sa;密码=*****”Microsoft.实体框架核心.SqlServer -输出目录模型
1.如果发生任何错误,请确保连接字符串中存在“TrustServerCertificate=true”属性,然后重新启动Visual Studio并重试scaffold命令
我尝试了很多次1)和2)点,但都失败了,但当我应用3)点,以及它为我工作
nx7onnlm4#
我知道这个问题有点老了,但我认为它对遇到同样问题的人很有用。
如果我没理解错你的问题,你想指定生成哪些表,如果你在命令中添加
-Tables
参数应该就可以了。下面是我用来生成3个数据库表的命令(在Package-Manager控制台中):
如您所见,我使用Northwnd数据库,只生成表“Products,Categories and Suppliers”。显然,您可以添加更多的表,只需要用逗号分隔它们。
如果你不知道,你可以通过进入数据连接(服务器资源管理器),点击你想添加的数据库,在右边(属性),你会看到一个属性(名称)。
我使用
-Force
覆盖我已经创建的所有Model。您可以使用
-DataAnnotations
来获取带注解的模型,否则,您将获取Fluent模型配置。附言:我只在ASP.NET核心2和实体框架核心2.0.0上试过。
dgenwo3n5#
我的情况是,我有一个.net 4.5+类库,其中包含DbContexts。
这些DbContext是使用“先从现有数据库编码”向导从现有数据库创建的。EF Core中似乎缺少此向导。
要从与EF Core兼容的现有数据库创建新的Code First DbContext,我大致遵循了here指南
我的步骤:
请注意,当使用非核心项目时,您可能会遇到nuget Package Manager控制台的问题。我通过创建一个新的核心类库而不是.net类库来避免这个问题。
创建上下文后,您可以像在Code First中一样编辑它,例如,您可以删除不想使用的表。
yh2wf1be6#
那些想要使用dotnet core将Sql数据库模式转换为EF core的用户请按照以下步骤操作:
一个接一个地运行所有命令(对于那些想创建新项目的人,第一个命令,否则你可以忽略它,只是从你的项目根文件夹运行其他给定的命令)
终于...
这将在项目的models文件夹中创建必要的模型和db模式上下文。
现在,您可以通过应用以下命令轻松生成CRUD代码:
将MyNewController更改为所需的控制器名称,将ModelName更改为要作为目标的models文件夹中的模型名称,最后将MyDbContext更改为Models文件夹中可用的系统生成的上下文文件名称
但是在运行该命令之前,请确保您已经在项目文件夹中appsettings.json和startup.cs文件中进行了必要的更改
应用程序设置.json添加到行后
“允许的主机”:“*",
startup.cs文件添加到该行之前
服务.添加Mvc().设置兼容版本(兼容版本.版本_2_2);
好好享受吧!!