asp.net防止mysql_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(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>(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>(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>(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版。

将旧版删除,重新安装此预览版。

目测暂时可正常运行项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值