前言:

  大家好,今天给大家带来ABP第二篇的分享,在写这篇分享的时候非常的困难,因为发现ABP的框架越是深入、难度也就越大,而且深刻感觉到自己领域驱动开发知识的欠缺,前段时间买了两本有关于领域驱动知识的数据,一本是领域驱动之父Eric Evans写的《领域驱动设计》、一本是Vaughn Vernon写的《实现领域驱动设计》,就目前而言,看了并没有几张,再次默默的自我检讨3分钟,下面回归正文:

  在ABP系统框架中,后台代码分为了几层,以下是层级的注释:

  1. MyABPProject.Application:应用服务层,包含各个应用的逻辑
  2. MyABPProject.Core:项目的核心层,在领域驱动分层中,应该属于领域层
  3. MyABPProject.EntityFrameworkCore:基于EntityFrameworkCore的封装,连接数据库,属于仓储基础设施层
  4. MyABPProject.Migrator:数据库迁移工具
  5. MyABPProject.Web.Core:项目的展现层,封装展现层所用到的工具
  6. MyABPProject.Web.Host:项目的动态API接口以及Swagger

  今天主要是写下数据库切换的问题,一开始,项目刚刚下载下来的时候,默认使用的是SqlServer数据库,按照上一篇的文章写的那样,数据库还原->运行项目,顺风顺水可以将项目运行起来,因为现在项目的变化,需要更改数据库,将由MySql代替SqlServer,故此分为了以下的几个步骤:

  1. 首先删除MyABPProject.EntityFrameworkCore项目下关于SqlServer的一些引用类库,需要删除的类库如下:
    • Microsoft.EntityFrameworkCore.SqlServer
    • Microsoft.EntityFrameworkCore.Design
  2. 添加MySql的引用类库,MySql需引用类库如下:
    • Pomelo.EntityFrameworkCore.MySql.Design
    • Pomelo.EntityFrameworkCore.MySql
  3. 注释MyABPProject.Web.Host和MyABPProject.Migrator项目中的“appsettings.json”文件下SqlServer数据库字符串,新增MySql数据库字符串
  4.  在整个解决方案中将字符串“SqlServerValueGenerationStrategy”替换成“MySqlValueGenerationStrategy”
  5. 在整个解决方案中将字符串“UseSqlServer”替换成“UseMySql”
  6. 删除MyABPProject.EntityFrameworkCore项目中“Migrations”这个文件夹下所有迁移文件
  7. 通过程序包管理控制台根据命令“Add-Migration "XXX"”重新生成迁移文件
  8. 生成成功后,根据命令“Update-Database”还原MySql数据库

     

  9. 重启启动项目,即可完成!

  为什么选择“Pomelo.EntityFrameworkCore.MySql”:

  MySql/MariaDB 推荐使用Pomelo EF Core组件,官方引用文件目前可能存在bug,Pomelo EF Core同样是微软官方所推荐的。