跟着官网学EF Core之逆向生成实体

跟着官网学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_ordertm_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

执行成功后,会生成xxxContextTdOrderTmUser三个文件,


刚才是全库生成,有时候我们想只生成某张表的实体,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
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

dotnet-ef就大概了解这么,其实用法和和功能与Scaffold-DbContext差不多,只是参数会有一些差别。

官方介绍,在逆向生成实体时,ef core会去读取有关表、列、约束和索引的信息,表名为实体类名;列名和列类型属性名和属性类型;外键为实体对应关系。 并且为实体类生成相应的数据注释。

好了,这一节就先了解到这个地方,感兴趣的伙伴们可以去官网详细了解,Reverse Engineering

跟着官网学EF Core之逆向生成实体

https://blogs.52fx.biz/posts/3815452333.html

作者

eyiadmin

发布于

2022-02-27

更新于

2024-05-31

许可协议

评论