ABP入门系列(21)——切换MySQL数据库

源码路径:Github-LearningMpaAbp

1. 引言

Abp支持MySql已经不是什么新鲜事了,但按照官方文档:Entity Framework - MySql Integration来,你未必能成功切换,本文就记录下切换MySql数据库遇到的一些坑,供后人乘凉!

2. 环境准备

MySql数据库好啊,开源免费,不再像SqlServer那样累赘。而且结合.Net Core,他俩贼般配的说!但MySql自从卖给Oracle后,好像就不怎么好玩了,安装起来还是挺费劲的说。一怒之下,转投MariaDB。

MariaDB由MySQL之父Michael Widenius主导开发的,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。MariaDB是目前最受关注的MySQL数据库衍生版,也被视为开源数据库MySQL的替代品。

MariaDB完全兼容MySql,所以就放一百二十个心好了。就不废话了,自行点击MariaDB Downloads下载安装吧。

3.开始切换环境

本文还是基于我之前的LearningMpaAbpDemo进行演示。

3.1. 安装MySql.Data.Entity

Solution-->右键-->'Manage NuGet Packages for solution...',安装MySql.Data.Entity到以”.Web"和“.EntityFramework”结尾的项目中去,如下图:

注意版本号,安装最新,我可不保证可以成功! 修改“.EntityFramework”结尾的项目Migrations文件夹下的Configuration.cs类,在构造函数中添加SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());。如下所示:

3.2. 设置连接字符串

修改Web.Config,添加连接字符串: <add name="Default" connectionString="server=localhost;port=3306;database=sampledb;uid=root;password=***" providerName="MySql.Data.MySqlClient"/> 之前的连接字符串就注释掉吧!

3.3. 重新添加迁移

如果你的Migrations文件夹下有很多以日期开头(比如:20171122022_)的迁移文件,全部删掉他们! 然后Tools-->Nuget Package Manage--> Package Manage Console:输入Add-Migration "Abp_MoveTo_Mysql"执行:

是的,你可能执行不成功,会遇到第一个坑:

Type is not resolved for member 'MySql.Data.MySqlClient.MySqlException,MySql.Data, Version=6.9.10.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d'.

如何搞呢?下载MySql为.Net平台提供的Connector安装就好了, 安装地址:Download Connector/Net。记住要选对对应的版本:

安装后,重新执行以上命令即可。

3.4. 执行迁移

执行命令Update-Database -Verbose,这个时候你会遇到第二个坑:

Index column size too large. The maximum column size is 767 bytes.

这是因为mysql对列的大小有限制。EF6使用MigrationHistory表跟踪模式的变化,以确保一致性的数据库模式和概念模式。由于主键太大,默认情况下此表不适合MySQL。要解决这种情况,需要缩小该表的键大小。具体可以参考以下两个链接:

  1. Entity Framework with MySql and Migrations failing because “max key length is 767 bytes”
  2. Entity Framework 6 Support

这边有个简单的做法,只需修改DbContext类上添加[DbConfigurationType(typeof(MySqlEFConfiguration))]声明即可。如下:

重新执行迁移命令,即可!

4. 最后

好久没更新了,现在重拾Abp,后续会结合ABP+.Net Core+MySQL,带给大家进阶分享,尽情期待!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVA烂猪皮

Netty原理分析

Netty是一个高性能、异步事件驱动的NIO框架,基于JAVA NIO提供的API实现。它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Net...

1832
来自专栏AI-vell

java轻量RESTful api服务搭建(jersey+jetty)

由于开始要搭建一个java + python的服务,java端提供数据库增删改查逻辑供python端调用,第一时间想到了用REST(Representation...

4297
来自专栏Objective-C

iOS-将自己的库支持CocoaPods

7164
来自专栏后端云

部署实时OpenStack实例

最近的OpenStack nova版本增加了对实时实例的支持,即提供实时应用所需的确定性和性能保证的实例。这项工作在OpenStack Ocata发行版中最终标...

2153
来自专栏一个会写诗的程序员的博客

RESTFeel: 一个企业级的API管理&测试平台。RESTFeel帮助你设计、开发、测试您的APIRESTFeel功能简介:MongoDB configuration:Building From

The build file is configured to download and use an embedded Tomcat server. So t...

1064
来自专栏开发技术

spring-boot-2.0.3不一样系列之国际化

       针对spring boot,网上已有很多优质的系列教程,我就不再班门弄斧了(实际上是担心没别人写的好,哈哈哈!)。但是还是想蹭蹭spring bo...

3703
来自专栏技术翻译

使用Spring Cloud Netflix的Kotlin微服务:第2部分

在本系列的第1部分中,我们使用Kotlin介绍了Spring Cloud。我们讨论了Config Server,Discovery Server(Eureka)...

1872
来自专栏JMCui

浅析 SpringMVC 原理和配置.

一、原理       Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)模式实现,它能够帮你构建像Spring框架...

3789
来自专栏向治洪

XMPP客户端库Smack 4.0.6版开发之二

XMPP客户端库Smack 4.0.6版开发之二 三、Smack库的特征 1、极度简单易用,API功能强大 发送一条文本消息给某个用户只需几行代码: Abst...

2165
来自专栏杨建荣的学习笔记

memory_target设置不当导致数据库无法启动的问题(r3笔记第38天)

今天在做一个问题排查的时候碰到了另外一个有些“奇怪的”问题。 我们在测试库中已经禁用了SGA自动存储管理,结果在spfile文件里丢掉了shared_pool_...

3586

扫码关注云+社区