Skip to content

97 ASP.NET Core MVC替换默认的Sqlite为Mysql

Jinxin Chen edited this page Dec 11, 2019 · 1 revision

本文介绍如何将 .NET Core 默认建立MVC站点的 DB 从 Sqlite 替换为 Mysql

目前 .NET Core 版本的 Mysql provider主要有2个:

  • MySql.Data.EntityFrameworkCore
  • Pomelo.EntityFrameworkCore.MySql

实际使用中发现 MySql.Data.EntityFrameworkCore 还存在一些问题,比如 identity 字段无法自动生成等,所以这里推荐使用 Pomelo.EntityFrameworkCore.MySql

引入依赖包

用 Nuget 安装依赖包:Pomelo.EntityFrameworkCore.MySql

或者直接修改 项目文件,添加:

<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="1.1.2"/>

配置DBContext

打开 Startup.cs 文件,修改为:

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseMySql(Configuration.GetConnectionString("DefaultConnection"))
);

修改连接字符串

打开 appsettings.json,修改为:

"DefaultConnection": "Server=;Database=;uid=;pwd="

使用 Mysql Docker 镜像

如果使用 Mysql 的Docker镜像来提供服务,可以利用docker-compose编排文件来实现:

docker-compose.mysql.yml

version: '2'

services:
  mysql:
    image: mysql:5.7.17
    volumes:
      - /data/web/mysql:/var/lib/mysql
      - ./mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=

注意事项

如果项目已经用 sqlite 或者 其他的 provider 生成了 migrations 并更新了数据库,再调整为新的provider时,如果直接替换可能会出错,原因是因为不同的 provider 对于自增长等字段的描述方式不同,比如 Pomelo.EntityFrameworkCore.MySql 对于自增长字段的描述方式如下:

Id = table.Column<int>(nullable: false)
    .Annotation("MySql:ValueGeneratedOnAdd", true),

此时如果要更换provider,还要一并替换 migrations 中自动生成的代码。

Clone this wiki locally