跟着官网学EF Core之逆向生成实体
偶尔会抽时间去微软官方看些资料,前面一直在学ASP.NET Core 6.0
,对EF Core
了解甚少,最近,一位网友看了我写的跟着官网学ASP.NET Core 6.0之通过EF Core6.0操作数据库
这篇文字后,问了一个问题怎么根据数据库生成相应的实体类?,这可把我问到了,所以,今天就抽时间去官网看了看。
要想将数据库表逆向生成实体类,有两种方式:
一: Visual Studio中安装PMC
工具,其实就是引入Microsoft.EntityFrameworkCore.Tools
包,
安装好该包后便能在`PM`控制台执行`Scaffold-DbContext`命令来逆向生成实体
二: 使用Core的命令行工具,在Cmd命令行中执行dotnet ef
来生成实体
接下来,我们便来分别实践一次。
Visual Studio PMC逆向生成实体
安装Microsoft.EntityFrameworkCore.Tools
包的过程就省略吧,前面也提到过怎么安装NuGet
包,我们直接进入到PM
控制台
这里我是使用的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 |
执行成功后,会生成xxxContext
、TdOrder
、TmUser
三个文件,
刚才是全库生成,有时候我们想只生成某张表的实体,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 |
此时,直接执行会出错,因为,生成目录中存在同名文件,我先手动删除掉
是不是觉得生成的实体只有代码,没有注释?错了,其实EF为什么考虑得很全面,我们只需要在表字段加上注释,EF Core便会为我们生成对应的注释
默认情况下,`Scaffold-DbContext`生成的文件会放在项目根目录,文件较多的话,看上去会很乱,所以,在生成的时候,最好是知道生成目录,指定目录的话,自然也会涉及到类的命令空间,这些,都可以通过指定参数来处理,如:`-ContextDir Content生成的文件夹 -OutputDir 实体生成的文件夹 -ContextNamespace Context的命名空间 -Namespace 实体的命名空间`,示例:
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
![](https://xxnote.52fx.biz/ef_core_tutorials_01_000015.png)
`Scaffold-DbContext`逆向生成实体类,咱们就暂时了解这么多,接下来,去大概了解一下Cmd命令逆向生成实体
Cmd命令行逆向生成实体
要想通过Cmd命令行逆向生成实体,前提是本机已经安装有dotnet core sdk,另外,还得安装dotnet-ef
命令,我相信,使用.netcore的同志已经具备这样的条件,但是,一般是没有安装dotnet-ef
,这里就要先安装该命令
1 | dotnet tool install --global dotnet-ef |
命令行工具安装成功后,还需要在项目中添加icrosoft.EntityFrameworkCore.Design
包,因为,我前面已引入了Microsoft.EntityFrameworkCore.Tools
包,其已关联安装好,这里我就不再去重复操作,直接进入到项目目录执行生成命令,
1 | 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 |
dotnet-ef
就大概了解这么,其实用法和和功能与Scaffold-DbContext
差不多,只是参数会有一些差别。
官方介绍,在逆向生成实体时,ef core会去读取有关表、列、约束和索引的信息,表名为实体类名;列名和列类型属性名和属性类型;外键为实体对应关系。 并且为实体类生成相应的数据注释。
好了,这一节就先了解到这个地方,感兴趣的伙伴们可以去官网详细了解,Reverse Engineering
跟着官网学EF Core之逆向生成实体