本文假设的你的AspNet Core 2.2的Web程序通过EntityFrameworkCore连接使用MSSQL数据库,能正常使用。

如何想转为使用Mysql,其实不难。

1、安装Mysql
这个简单,从官网https://www.mysql.com/downloads/可以直接下载,无需注册网站。个人使用只需要Community社区版即可。
如果下载的是zip压缩版,解压到相应位置。添加my.ini到mysql安装目标,网上可以很容易搜索找到。
命令行模式进入安装目录下的bin内:
(1)运行mysqld --initialize --console,记住显示的root的初始化密码。
(2)安装windows的mysql服务:mysqld --install [服务名]
(3)运行net start mysql启动服务。
(4)运行mysql -u root -p,输入初始化密码登录。
(5)正常进入mysql后,运行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; 修改密码。
(6)几条常用命令:show databases;显示数据库//use 数据库名;设置当前数据库//show tables;显示当前数据库的表。//drop database 数据库;删除数据库。

2.修改数据库连接
编辑web项目下的appsetings.json文件,修改或添加:

"ConnectionStrings": {
"MysqlConnection": "Data Source=localhost;Database=数据库名;User
ID=root;Password=密码;pooling=true;CharSet=utf8;port=3306;sslmode=none"
},

  

3.添加程序包
web项目右击运行"管理NuGet程序包...",浏览添加Pomelo.EntityFrameworkCore.MySql。(如果添加官方的Mysql.Data.EntityFrameworkCore,之后出现会一些问题)。

4.编辑配置Mysql服务
编辑web项目下的Startup.cs文件,在ConfigureServices方法中,将原来的UserSqlServer服务项注释掉,添加

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

其中ApplicationDbContext替换为你的数据库上下文,MysqlConnection为第2步设置的连接串名。

(使用官方Mysql.Data.EntityFrameworkCore时,上面内容为options.UseMySQL)

5.运行程序
如果你配置了Code First,现在运行程序应该可以自动创建数据库和导入数据。

6.几个问题
如果你的Web使用了官方个人用户标识Identity,直接使用Mysql可能会出现一些问题。

(1)ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes)。
原因是个人用户标识Identity一些表使用复合字段索引,而这些字段是字符型,这样容易造成mysql主键索引超长问题。
解决办法:先删除数据库和之前的迁移目录(注意备份),编辑数据上下文类所在类,添加

protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder); // UserLogins用户登录表最大字长限制(否则mysql中出现索引超出长度限制3073字节问题)
builder.Entity<IdentityUserLogin<string>>(b =>
{
b.HasKey(t => new { t.LoginProvider, t.ProviderKey });
b.Property(u => u.LoginProvider).HasMaxLength(128);
b.Property(u => u.ProviderKey).HasMaxLength(128);
b.ToTable("AspNetUserLogins");
}); builder.Entity<IdentityUserToken<string>>(b =>
{
b.Property(t => t.LoginProvider).HasMaxLength(128);
b.Property(t => t.Name).HasMaxLength(128);
b.HasKey(t => new { t.UserId, t.LoginProvider, t.Name });
b.ToTable("AspNetUserTokens");
}); builder.Entity<IdentityUserRole<string>>(b =>
{
b.Property(t => t.UserId).HasMaxLength(128);
b.Property(t => t.RoleId).HasMaxLength(128);
b.HasKey(r => new { r.UserId, r.RoleId });
b.ToTable("AspnetUserRoles");
});
}

  

 

以上三个表都使用复合字段索引,所以添加了最大字段长度,这样就可以避免这个问题了。
可以通过程序包管理控制台运行Add-Migration InitData和Update-Database看看能否正常迁移数据库。

(2)如何你现在使用3.0以上版本Netcore,继续使用2.2.x版的Pomelo.EntityFrameworkCore.MySql会出现各种运行错误(2019.11.4新增)
请重新运行NuGet,并将包含预览版检测框加上勾,因为目前Pomelo.EntityFrameworkCore.MySql的最新版只有3.0.0-rc1.final版。
将旧版删除,重新安装此预览版。
目测暂时可正常运行项目。

AspNet Core使用Mysql一些问题及解决方案的更多相关文章

  1. ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作

    前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...

  2. Visual Studio Code和Docker开发asp.net core和mysql应用

    Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...

  3. ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)

    ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题:  浏览器安全限制了前端脚本跨站点的访问资源, ...

  4. Entity Framework Core For MySql查询中使用DateTime.Now的问题

    背景 最近一直忙于手上澳洲线上项目的整体迁移和升级的准备工作,导致博客和公众号停更.本周终于艰难的完成了任务,借此机会,总结一下项目中遇到的一些问题. EF Core一直是我们团队中中小型项目常用的O ...

  5. Docker Compose 容器编排 NET Core 6+MySQL 8+Nginx + Redis

    环境: CentOS 8.5.2111Docker 20.10.10Docker-Compose 2.1.0 服务: db  redis  web nginx NET Core 6+MySQL 8+N ...

  6. 【AspNet Core】Nuget代理网站

    因为访问Nuget太慢,在Dotnet Core RC2发布前,我就基于Asp.Net做了一个Nuget代理网站 这是网站地址:http://nuget.lzzy.net/ Nuget源:http:/ ...

  7. mysql服务突然丢失解决方案

    mysql服务突然丢失解决方案 今天系统从win7更新到win10之后,mysql突然没了,使用navicat连接提示如下: 看到这个,以为自己的mysql服务没启动,于是打开服务找mysql服务,发 ...

  8. 图文详解linux/windows mysql忘记root密码解决方案

    经常有用户过来咨询说自己的mysql服务器忘记密码了怎么办,为了更好的解决大家的困扰,本文特归档整理了windows和linux系统下,mysql忘记密码的解决方案.本文内容是我亲测实用,当然过程中踩 ...

  9. AspNet Core 初步认识

    Core 的出现对我我没有很大的影响,当时在Core要发布的时候听到周围的人再聊再谈,我没有去太多关注,就是一个屌丝开发人员. 直到又一次偶然见到一位特别喜欢.net的老开发人员谈起Core时落泪了, ...

随机推荐

  1. PHP数组相关算法

    一.排序算法 1. 冒泡排序 2. 选择排序 二.查找算法 1. 遍历 2. 二分查找

  2. 百度云人脸识别API人脸对比

    from urllib import request import base64 import requests import re import json import urllib import ...

  3. 五、select的5种子句

    1.Where 条件查询 比较运算符: 运算符 说明 >   <   =   >=   <=   !=或<>   In 在某集合内 between 在某范围内 In ...

  4. Rust语言中的常量,变量,运算符,数据类型

    简单练练, 夏天太热. const MAX_POINTS: u32 = 100_100; fn main() { let mut x = 5; let y = 5; let y = y + 1; le ...

  5. linux(05) 编译安装py3

    一.编译安装python3 https://www.cnblogs.com/pyyu/p/9015317.html 1.下载python3的源码 cd /opt yum install wget -y ...

  6. 201871010118-唐敬博《面向对象程序设计(java)》第十二周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...

  7. mysql版本引起的驱动问题

    mysql版本引起的驱动问题 com.mysql.jdbc.Driver 是 mysql-connector-java 5中的, com.mysql.cj.jdbc.Driver 是 mysql-co ...

  8. Git 创建点开头的文件和目录

    Git 创建点开头的文件和目录 # 创建 .gitignore 文件 1@DESKTOP-3H9092J MINGW64 /e/x1/x1/demo1 (master) $ echo .idea &g ...

  9. MyBatis 插入记录同时获取主键

    MyBatis 插入记录同时获取主键 MyBatis 插入记录同时获取主键的系统界面 useGeneratedKeys 属性 keyProperty 属性 keyColumn 属性 selectKey ...

  10. TCP三次握手第三次握手时ACK丢失怎么办

    Server 端 第三次的ACK在网络中丢失,那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制,会等待3秒.6秒.12秒后重新发送SYN+ACK包,以便Cli ...