首先使用ABP CLI创建项目,例如名为Book
1、修改数据库连接字符串
在Book.Web项目中,打开‘appsetting.json’文件,修改连接字符串为MySql:
"ConnectionStrings": {
"Default": "server=localhost;port=3306;database=testdb;User ID=root;Password=123456;"
},
2、添加MySql Nuget程序包
打开Book.EntityFrameworkCore程序的Nuget程序包,卸载
Volo.Abp.EntityFrameworkCore.SqlServer包,安装Volo.Abp.EntityFrameworkCore.MySQL包,如下图:
3、修改错误代码
(1)Book.EntityFrameworkCore项目中的BookEntityFrameworkCoreModule.cs文件中的options.UseSQLServer()
改为options.UseMySQL()
。
将依赖项目typeof(AbpEntityFrameworkCoreSqlServerModule)
改为typeof(AbpEntityFrameworkCoreMySQLModule)
。
(2)Book.EntityFrameworkCore.DbMigrations项目中的BookStoreMigrationsDbContextFactory.cs文件中
var builder = new DbContextOptionsBuilder<EyinzhangMigrationsDbContext()
.UseSqlServer(configuration.GetConnectionString("Default"));
修改为:
var builder = new DbContextOptionsBuilder<EyinzhangMigrationsDbContext>()
.UseMySql(configuration.GetConnectionString("Default"));
如下图:
4、重新生成迁移
如果update-database出现错误CREATE TABLE IdentityServerApiSecrets
,修改方法如下,在Book.EntityFrameworkCore项目的EntityFrameworkCore文件夹下添加IdentityServerModelCreatingExtensions
类,代码如下:
public static class IdentityServerModelCreatingExtensions
{
public static void ConfigureIdentityServerForMySQL(this ModelBuilder builder)
{
// Solve the problem of MySQL migration
// https://github.com/abpframework/abp/issues/1920
builder.Entity<ApiSecret>(b =>
{
// After trying, you can also set it to 400
b.Property(x => x.Value).HasMaxLength(300);
});
builder.Entity<ClientPostLogoutRedirectUri>(b =>
{
b.Property(x => x.PostLogoutRedirectUri).HasMaxLength(300); // or 400 ?
});
builder.Entity<ClientRedirectUri>(b =>
{
b.Property(x => x.RedirectUri).HasMaxLength(300); // or 400 ?
});
builder.Entity<ClientSecret>(b =>
{
b.Property(x => x.Value).HasMaxLength(300); // or 400 ?
});
}
}
在BookDbContext类中的OnModelCreating
方法末尾,添加以下代码:
builder.ConfigureIdentityServer(options =>
{
options.DatabaseProvider = EfCoreDatabaseProvider.MySql;
});
builder.ConfigureIdentityServerForMySQL();
在BookDbContextModelCreatingExtensions类中的ConfigureEyinzhang
方法添加以下代码:
builder.ConfigureIdentityServer(options =>
{
options.DatabaseProvider = EfCoreDatabaseProvider.MySql;
});
修改之后就可以更新数据库。