ABP 适用性改造 - 精简 ABP CLI 生成的项目结构 (3)

为了方便起见,我们先把 .EntityFrameworkCore.DbMigrations 中的文件全部拷贝一份到 .EntityFrameworkCore 这个类库中,然后直接在解决方案中移除掉原有的类库后再进行调整

PS:这里的 Migrations 文件夹以及 .EntityFrameworkCore.DbMigrations 的模块类就可以直接删除了,毕竟上面我们精简了模板的功能后,绝大多数的表也不复存在了 ,后面在类库合并后也会重新执行数据库迁移的操作

合并 EF Core 相关类库

因为现在会在 .EntityFrameworkCore 上执行 migration 的操作,所以这里需要添加上 EF Core 官方的 Design 组件包

Install-Package Microsoft.EntityFrameworkCore.Design

对于从 .DbMigrations 这个类库,其实是存在引用关系的,当整体删除之后,我们需要在 .HttpApi.Host 上添加对于 .EntityFrameworkCore 这个类库的引用。同时,对于拷贝过来的文件,其实是存在功能重复的问题,所以这里我们需要对这些文件进行合并归纳

首先,则是需要对于 DbContext 这个数据库上下文对象进行合并。从下图中可以看到,两个 DbContext 主要在配置实体映射关系的地方有所差异,因此这里直接将 MigrationsDbContext 这个类中关于 ABP 内置框架的实体映射配置拷贝过去即可,然后就可以直接删除了

合并 DbContext

对于每个 ABP 类库来说,都会存在一个入口的模块类,这里对比后就可以发现,直接将 EntityFrameworkCoreDbMigrationsModule 这个模块类删除即可,然后你需要将 .HttpApi.Host 项目中引用的这个模块类型改为 EntityFrameworkCoreModule

此时,编译解决方案,报错的问题主要是因为引用了已经删除的 DbContext,这里直接替换成现在使用的即可

修复 DbContext 引用错误的问题

这里还有一项需要注意,从上图中的第 27 行可以看到,这里获取的是 .DbMigrator 这个控制台应用中的配置文件,所以这里也需要同步修改成获取 .HttpApi.Host 项目中的配置文件

自此,涉及到 EF Core 相关功能的类库就合并完成了,定位到 .EntityFrameworkCore 这个类库,在控制台中就可以通过 migrations 命令来执行数据库的迁移工作。因为已经执行过一次了,所以直接将原来的库删除即可

-- 1、创建迁移文件 dotnet ef migrations add Initialize -- 2、应用到数据库中 dotnet ef database update

PS:这里使用的是 EF Core tools 这么一个 dotnet tool,如果控制台提示你找不到命令的话,你需要先安装该工具到你的电脑上

dotnet tool install --global dotnet-ef

等待迁移工作的完成,数据库也重新生成了对应的表,此时再次运行项目,系统运行无误后即可进行后续的操作

迁移完成

2.3.2、合并 API 宿主相关功能

一般来说,我们会在 ASP.NET Core 项目中来定义 Controller,并以此作为整个接口项目的宿主程序,在 ABP 中,涉及到 API 接口的包含了如下的三个类库

.HttpApi:定义 API 接口的 controller

.HttpApi.Client:用于设置其它 C# 程序调用该 API 的 HTTP 代理

.HttpApi.Host:API 接口的宿主程序

这里的 .HttpApi.Client 的类库我们使用不到,所以直接删除即可,对于剩下的两个类库将进行合并,统一至 .HttpApi.Host 这个 ASP.NET Core 项目中

对于这两个类库的合并很简单,直接将 .HttpApi 项目中的类文件直接拷贝到 .HttpApi.Host 中即可,然后将模块类中的配置进行移动,最后直接删除 .HttpApi 类库,并将相关引用删除即可

合并 API 相关功能

至此,整个模板项目的简化也就结束了,在保留 ABP 的设计思想下,基于开发现状,构建了一个相对单一的模板项目,调整后的项目引用关系图如下所示

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspysp.html