此时,直接执行会出错,因为,生成目录中存在同名文件,我先手动删除掉
偶尔会抽时间去微软官方看些资料,前面一直在学,对了解甚少,最近,一位网友看了我写的这篇文字后,问了一个问题怎么根据数据库生成相应的实体类?,这可把我问到了,所以,今天就抽时间去官网看了看。
ASP.NET Core 6.0
EF Core
跟着官网学ASP.NET Core 6.0之通过EF Core6.0操作数据库
要想将数据库表逆向生成实体类,有两种方式:
一: Visual Studio中安装工具,其实就是引入包,
PMC
Microsoft.EntityFrameworkCore.Tools
![](http://dingyue.ws.126.net/2022/0308/9170042ej00r8fkh00019c000bn005ym.jpg)
安装好该包后便能在`PM`控制台执行`Scaffold-DbContext`命令来逆向生成实体
二: 使用Core的命令行工具,在Cmd命令行中执行来生成实体
dotnet ef
接下来,我们便来分别实践一次。
Visual Studio PMC逆向生成实体
安装包的过程就省略吧,前面也提到过怎么安装包,我们直接进入到控制台
Microsoft.EntityFrameworkCore.Tools
NuGet
PM
![](http://dingyue.ws.126.net/2022/0308/23927cc4j00r8fkh0001sc000k700dxm.jpg)
![](http://dingyue.ws.126.net/2022/0308/ec334b39j00r8fkh2000vc0013q007pm.jpg)
这里我是使用的,在开始之前,我先在数据库中创建了的和两张表。另外,关于数据库的驱动包安装,在前面也提到过,也就不在赘述。咱们直接上手操作起来。
Mariadb
td_order
tm_user
跟着官网学ASP.NET Core 6.0之通过EF Core6.0操作数据库
直接在控制台输入, 如:
PM
Scaffold-DbContext '数据连接' 数据库驱动
1
Scaffold-DbContext 'Server=127.0.0.1;User=root;Password=root;Database=mall' Pomelo.EntityFrameworkCore.MySql
![](http://dingyue.ws.126.net/2022/0308/d6907514j00r8fkh5004cc0013e00jgm.jpg)
执行成功后,会生成、、三个文件,
xxxContext
TdOrder
TmUser
![](http://dingyue.ws.126.net/2022/0308/eb8bd814j00r8fkh00036c0013100hmm.jpg)
![](http://dingyue.ws.126.net/2022/0308/3de0658fj00r8fkh00018c000mq00bpm.jpg)
![](http://dingyue.ws.126.net/2022/0308/2e325c4aj00r8fkh0001ac000mt00b6m.jpg)
刚才是全库生成,有时候我们想只生成某张表的实体,也是支持的指定参数来过滤,可以为数组,如或者,另外,默认是,我们也可以指定参数来生成指定的名,如:。我们来试一试
Scaffold-DbContext
Tables
-Tables td_order
-Tables td_order,tm_user
Context
DataBaseNameContext
Context
-Context MallContext
1
Scaffold-DbContext 'Server=127.0.0.1;User=root;Password=;Database=mall' Pomelo.EntityFrameworkCore.MySql -Tables tm_user -Context MallContext
![](http://dingyue.ws.126.net/2022/0308/5589450dj00r8fkh0002cc0012z004om.jpg)
![](http://dingyue.ws.126.net/2022/0308/23c0360ej00r8fkh0000gc000ax004om.jpg)
是不是觉得生成的实体只有代码,没有注释?错了,其实EF为什么考虑得很全面,我们只需要在表字段加上注释,EF Core便会为我们生成对应的注释
![](http://dingyue.ws.126.net/2022/0308/71dc8fc8j00r8fkh00019c000ui006fm.jpg)
![](http://dingyue.ws.126.net/2022/0308/6d3df059j00r8fkh0001cc000il00e6m.jpg)
默认情况下,`Scaffold-DbContext`生成的文件会放在项目根目录,文件较多的话,看上去会很乱,所以,在生成的时候,最好是知道生成目录,指定目录的话,自然也会涉及到类的命令空间,这些,都可以通过指定参数来处理,如:`-ContextDir Content生成的文件夹 -OutputDir 实体生成的文件夹 -ContextNamespace Context的命名空间 -Namespace 实体的命名空间`,示例: ![](https://xxnote.52fx.biz/ef_core_tutorials_01_000015.png) `Scaffold-DbContext`逆向生成实体类,咱们就暂时了解这么多,接下来,去大概了解一下Cmd命令逆向生成实体
1
Scaffold-DbContext 'Server=127.0.0.1;User=root;Password=;Database=mall' Pomelo.EntityFrameworkCore.MySql -Tables tm_user -Context MallContext -ContextDir Context -OutputDir Models -ContextNamespace CoreDemo.Context -Namespace CoreDemo.Models
Cmd命令行逆向生成实体
要想通过Cmd命令行逆向生成实体,前提是本机已经安装有dotnet core sdk,另外,还得安装命令,我相信,使用.netcore的同志已经具备这样的条件,但是,一般是没有安装,这里就要先安装该命令
dotnet-ef
dotnet-ef
1
dotnet tool install --global dotnet-ef
![](http://dingyue.ws.126.net/2022/0308/c40241b4p00r8fkh00007c000fc002bm.png)
命令行工具安装成功后,还需要在项目中添加包,因为,我前面已引入了包,其已关联安装好,这里我就不再去重复操作,直接进入到项目目录执行生成命令,
icrosoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Tools
1
2
dotnet ef dbcontext scaffold "Server=127.0.0.1;User=root;Password=root;Database=mall" Pomelo.EntityFrameworkCore.MySql --table tm_user --table td_order --context MallContext --context-dir Context --output-dir Models --context-namespace CoreDemo.Context --namespace CoreDemo.Models
![](http://dingyue.ws.126.net/2022/0308/db2ad1b7j00r8fkh0002nc000xn006em.jpg)
就大概了解这么,其实用法和和功能与差不多,只是参数会有一些差别。
dotnet-ef
Scaffold-DbContext
官方介绍,在逆向生成实体时,ef core会去读取有关表、列、约束和索引的信息,表名为实体类名;列名和列类型属性名和属性类型;外键为实体对应关系。 并且为实体类生成相应的数据注释。
好了,这一节就先了解到这个地方,感兴趣的伙伴们可以去官网详细了解,Reverse Engineering
热门跟贴