AspNet Core使用Mysql一些问题及解决方案
本文假设的你的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一些问题及解决方案的更多相关文章
- ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作
前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...
- Visual Studio Code和Docker开发asp.net core和mysql应用
Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...
- ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)
ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题: 浏览器安全限制了前端脚本跨站点的访问资源, ...
- Entity Framework Core For MySql查询中使用DateTime.Now的问题
背景 最近一直忙于手上澳洲线上项目的整体迁移和升级的准备工作,导致博客和公众号停更.本周终于艰难的完成了任务,借此机会,总结一下项目中遇到的一些问题. EF Core一直是我们团队中中小型项目常用的O ...
- 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 ...
- 【AspNet Core】Nuget代理网站
因为访问Nuget太慢,在Dotnet Core RC2发布前,我就基于Asp.Net做了一个Nuget代理网站 这是网站地址:http://nuget.lzzy.net/ Nuget源:http:/ ...
- mysql服务突然丢失解决方案
mysql服务突然丢失解决方案 今天系统从win7更新到win10之后,mysql突然没了,使用navicat连接提示如下: 看到这个,以为自己的mysql服务没启动,于是打开服务找mysql服务,发 ...
- 图文详解linux/windows mysql忘记root密码解决方案
经常有用户过来咨询说自己的mysql服务器忘记密码了怎么办,为了更好的解决大家的困扰,本文特归档整理了windows和linux系统下,mysql忘记密码的解决方案.本文内容是我亲测实用,当然过程中踩 ...
- AspNet Core 初步认识
Core 的出现对我我没有很大的影响,当时在Core要发布的时候听到周围的人再聊再谈,我没有去太多关注,就是一个屌丝开发人员. 直到又一次偶然见到一位特别喜欢.net的老开发人员谈起Core时落泪了, ...
随机推荐
- RDD源码分析
RDD源码解析 一. RDD.scala - Resilient Distributed Dataset (RDD) 弹性分布式数据集 弹性: 体现在计算上面 - the basic abstract ...
- 【原创】Centos 7 升级安装python3.7.4
1.安装必须的软件 #更新源中包列表 yum -y update #先安装扩展源EPEL 才能安装pip 否则会报错 yum -y install epel-release //解决ssl问题,否则报 ...
- INPUT输入子系统【转】
转自:https://www.cnblogs.com/deng-tao/p/6094049.html 1.Linux系统支持的输入设备繁多,例如键盘.鼠标.触摸屏.手柄或者是一些输入设备像体感输入等等 ...
- lf 前后端分离 (2) 课程数据获取,Serializer的返回
一.关于课程数据的返回 在进行前后端分离时,会通过def 进行前后端传值, 本质上遵循rest 网址规范 增删改查查 get,post,put,del get(\d+) 1.在从数据库获取数据后,进 ...
- CentOS 8 网卡命令
nmcli n 查看nmcli状态 nmcli n on 启动nmcli nmcli c up eth0 启动网卡eth0 nmcli c down eth0 关闭网卡eth0 nmcli d c ...
- Netty4的介绍(一)
Netty是由JBOSS提供给的一个java开源框架.Netty提供异步的.事件驱动的网络应用框架和工具,用以快速开发高性能.高可靠的网络服务器和客户端程序. 也就是说,Netty是一个基于NIO的客 ...
- HTTPS各版本安全策略HTTPS1_1_TLS1_0、HTTPS2_TLS1_0、HTTPS2_TLS1_2
来自阿里云 https://help.aliyun.com/document_detail/115169.html HTTPS安全策略 更新时间:2019-04-26 14:49:12 分组 ...
- zzL1和L2正则化regularization
最优化方法:L1和L2正则化regularization http://blog.csdn.net/pipisorry/article/details/52108040 机器学习和深度学习常用的规则化 ...
- Mysql对表中 数据 查询的操作 DQL
准备数据,倒入sql文件 运行sql文件 得到四张表 select * from 表名 * 代表全部 1.AS子句作为别名 select studentname as "姓名" ...
- Genome Sequencing of MuseumSpecimens Reveals Rapid Changes in the Genetic Composition of Honey Bees in California
文章地址:https://academic.oup.com/gbe/article/10/2/458/4810442#supplementary-data Abstract 在自然生态系统和管理生态系 ...