一:开发环境
- 开发工具: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”程序包。如下图
4、切换Mysql
4.1、在 Dnc.Abp.EntityFrameworkCore 项目下 AbpEntityFrameworkCoreModule.cs 文件中修改 Configure 为 options.UseMySQL();
4.2、将依赖项目 typeof(AbpEntityFrameworkCoreSqlServerModule) 修改为 typeof(AbpEntityFrameworkCoreMySQLModule)
4.3、在 Dnc.Abp.EntityFrameworkCore.DbMigrations 项目下 AbpMigrationsDbContextFactory.cs 文件中修改为.UseMySql
var builder = new DbContextOptionsBuilder<AbpMigrationsDbContext>() .UseMySql(configuration.GetConnectionString("Default"));
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 TABLEIdentityServerApiSecrets
(`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
命令,同步数据库。成功!