构建ABP vNext项目并切换MySql数据库

一:开发环境

  • 开发工具:Vs2019 16.6.0
  • 运行时:. Net Core 3.1
  • 数据库:MySql
  • abp版本:2.7.0

二:构建项目

1、安装abp CLT

dotnet tool install -g Volo.Abp.Cli

2、如果之前安装过,则更新

dotnet tool update -g Volo.Abp.Cli

3、使用abp官方CLI工具创建项目

abp new Dnc.Abp

三:切换Mysql

目前只支持构建mongodb、SqlServer数据库,需要手动切换Mysql数据库

1、使用 Vs 2019 16.6.0   打开项目,进行Nuget还原

2、修改数据库连接字符串

Dnc.Abp.Web项目中 appsettings.json 文件修改数据库连接字符串

  "ConnectionStrings": {
    "Default": "Server=localhost;Database=test;Uid=wuzhd;Pwd=xxxxxx"
  },
3、管理“Dnc.Abp.EntityFrameworkCore”项目中Nuget程序包,卸载其中的“Volo.Abp.EntityFrameworkCore.SqlServer”包,并浏览安装“Volo.Abp.EntityFrameworkCore.MySQL”程序包。如下图

构建ABP vNext项目并切换MySql数据库

 

 

 

4、切换Mysql

  4.1、在 Dnc.Abp.EntityFrameworkCore 项目下 AbpEntityFrameworkCoreModule.cs 文件中修改 Configure 为 options.UseMySQL(); 

  4.2、将依赖项目  typeof(AbpEntityFrameworkCoreSqlServerModule) 修改为 typeof(AbpEntityFrameworkCoreMySQLModule) 

构建ABP vNext项目并切换MySql数据库

  4.3、在 Dnc.Abp.EntityFrameworkCore.DbMigrations 项目下 AbpMigrationsDbContextFactory.cs 文件中修改为.UseMySql

var builder = new DbContextOptionsBuilder<AbpMigrationsDbContext>()
                .UseMySql(configuration.GetConnectionString("Default"));

构建ABP vNext项目并切换MySql数据库

 

 

 

  4.4、在 Dnc.Abp.EntityFrameworkCore 项目下 OnModelCreating 方法中增加如下配置

builder.ConfigureIdentityServer(options =>
            {
                options.DatabaseProvider = EfCoreDatabaseProvider.MySql;
            });

5、生成迁移

至此,Mysql配置的修改基本完成,项目也没有错误提示了,将Dnc.Abp.Web项目设置为启动项目,在程序包管理控制台,将默认项目设置为“Dnc.Abp.EntityFrameworkCore.DbMigrations”,输入add-migration命令重新生成迁移。

M> add-migration
位于命令管道位置 1 的 cmdlet Add-Migration
请为以下参数提供值:
Name: init
Build started...
Build succeeded.
To undo this action, use Remove-Migration.
PM>

如上,可以正常生成迁移文件。但是如果在执行update-database时,提示如下错误:

Failed executing DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE IdentityServerApiSecrets (

`Type` varchar(250) CHARACTER SET utf8mb4 NOT NULL,
`Value` longtext CHARACTER SET utf8mb4 NOT NULL,
`ApiResourceId` char(36) NOT NULL,
`Description` varchar(2000) CHARACTER SET utf8mb4 NULL,
`Expiration` datetime(6) NULL,
CONSTRAINT `PK_IdentityServerApiSecrets` PRIMARY KEY (`ApiResourceId`, `Type`, `Value`),
CONSTRAINT `FK_IdentityServerApiSecrets_IdentityServerApiResources_ApiResou~` FOREIGN KEY (`ApiResourceId`) REFERENCES `IdentityServerApiResources` (`Id`) ON DELETE CASCADE

);

.....

BLOB/TEXT column 'Value' used in key specification without a key length

解决方法为;在 Dnc.Abp.EntityFrameworkCore 项目OnModelCreating方法中增加如下配置:

builder.ConfigureIdentityServer(options =>
            {
                options.DatabaseProvider = EfCoreDatabaseProvider.MySql;
            });

全部修改完成后,删除Migration文件夹,重新执行add-migration生成迁移,并执行update-database命令,同步数据库。成功!

 

上一篇:64位系统访问注册表SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall


下一篇:[Abp vNext 源码分析] - 14. EntityFramework Core 的集成