-
Notifications
You must be signed in to change notification settings - Fork 0
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"/>
打开 Startup.cs 文件,修改为:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseMySql(Configuration.GetConnectionString("DefaultConnection"))
);
打开 appsettings.json,修改为:
"DefaultConnection": "Server=;Database=;uid=;pwd="
如果使用 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 中自动生成的代码。