• 构建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”程序包。如下图

    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 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命令,同步数据库。成功!

  • 相关阅读:
    使用 virtualenv/venv 和 pip 管理虚拟环境
    Python:virtualenv 和 venv 的区别
    Python | Get unique values from a list
    Python ORM 框架 Peewee 知识点
    python之配置日志的几种方式
    python 中的 None,知识点
    Gunicorn 知识点
    gunicorn部署flask的log处理
    Python 逻辑运算符(and、or、not)、成员运算符(in、not in)、身份运算符(is、is not)
    Python 中没有 null,用 None 表示
  • 原文地址:https://www.cnblogs.com/ZhengHengWU/p/12955690.html
Copyright © 2020-2023  润新知