AspNet Core 2.2使用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)待续

原文地址:https://www.cnblogs.com/moonblogcore/p/10917248.html

时间: 2024-07-29 13:19:53

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

EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型

官方教程:https://docs.microsoft.com/en-us/aspnet/core/data/?view=aspnetcore-2.1 使用EF CodeFirst在MySql中创建新的数据库,我们首先在appsettings.json文件夹中,使用json对来给出mysql数据库连接语句,其次在 Startup.cs中使用MySql的中间价来注入MySql服务,在这里,我使用的MySql驱动是Pomelo.EntityFramoworkCore.MySql.新建一个类,用来做数

【AspNet Core】Nuget代理网站

因为访问Nuget太慢,在Dotnet Core RC2发布前,我就基于Asp.Net做了一个Nuget代理网站 这是网站地址:http://nuget.lzzy.net/ Nuget源:http://nuget.lzzy.net/api/v2 广西电信百兆带宽. 这个网站将会缓存所有访问过的API页面与包. API页面缓存的原理,第一次访问会等待服务器从Nuget上下载页面信息 下载后会替换里面的网址并保存到数据库. 第二次访问会从数据库里取出页面兵判断过期时间 如果已过期,先返回页面信息,后

.NET Core、Docker、Mysql简单之旅(二)

一.创建数据库表 运行数据库:docker restart local-mysql 用Mysql客户端创建Employees数据库表 表名:Employees Id: int(11) 主键,自动递增      Name: varchar(32)      LastName: varchar(32) 二.修改project.json {  "version": "1.0.0-*",  "buildOptions": {    "debug

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添加一个User类: namespace MyFirstApp.Models { public class User { public int ID { get; set; } public string Name { get; set; } public string Email { get; se

net Core 通过 Ef Core 访问、管理Mysql

net Core 通过 Ef Core 访问.管理Mysql 本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1.0.0-preview2-003131 本文分为Window环境和Mac Os X环境. 相关资源下载 Visual Studio Code:https://code.visualstudio.com DotNet Core:https://dotnet.github.io/ MySql.Data.

.NET Core 使用Dapper 操作MySQL

MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使用Dapper. 目前官方没有出.NET Core MySQL  驱动,但是已经有第三方进行改动封装出.NET Core MySQL Connector 预览版. Dapper 也已经出了 .NET Core 预览版. Dapper dot net 是一个轻量型的ORM,但是性能很强大. 有了.NE

aspnet core 2.1中使用jwt从原理到精通一

目录 原理: 根据原理使用C#语言,生成jwt: 自定义验证jwt: 使用aspnetcore 中自带的类生成jwt: 学有所得 了解jwt原理; 使用C#轻松实现jwt生成和验证 原理 jwt对所有语言都是通用的,只要知道秘钥,另一一种语言有可以对jwt的有效性进行判断; jwt的组成:Header部分Base64转化.Payload部分Base64转化.使用HS256方式根据秘钥对前面两部分进行加密后再Base64转化,其中使用的hs256加密是header部分指定的,也可以通过官网的查看,

.Net Core 3.0 WebAPI && MySQL 8.0搭建详情

微软在2019年9月24日发布了dotNet Core 3.0和C# 8.0,添加了许多新Features,详情点我.无疑dotNet Core 3.0和一个月之后即将发布的dotNet Core 3.1对于dotNet来说是一个重要的里程碑. 对于MySQL而言,现在越来越多的商业公司使用MySQL来作为自己的主要数据库,虽然MySQL已经迎来了8.0的版本,有着更完善的数据能力,更好的性能,但是还是有很多公司在新项目上使用MySQL5.7.我在技术上很鄙视这样的做法,一旦使用的老技术Out

ASPNET CORE 的 DI 依赖注入 及 AuotoFac 的引入

学习有关Aspnet Core 的DI及IOC等,参考: 1.全面理解 ASP.NET Core 依赖注入    https://blog.csdn.net/hiliqi/article/details/80611209 提及 AuotoFac 的引入Aspnet Core的方式: 把Startup类里面的 ConfigureService的 返回值从 void改为 IServiceProvider即可. public IServiceProvider ConfigureServices(