美文网首页dotNETABP.NET
ABP入门系列(21)——切换MySQL数据库

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

作者: 圣杰 | 来源:发表于2017-11-22 11:16 被阅读1732次

    ABP入门系列目录——学习Abp框架之实操演练
    源码路径: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”结尾的项目中去,如下图:

    MySql.Data.Entity
    注意版本号,安装最新,我可不保证可以成功!
    修改“.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。记住要选对对应的版本:

    6.9.10

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

    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,带给大家进阶分享,尽情期待!

    相关文章

      网友评论

      • wang_erer:Incorrect usage of spatial/fulltext/hash index and explicit index order
        迁移时,会报这个错,博主有遇到过吗
        圣杰:@符号看象限_ba81 nope,遇到问题是好事,自己动手尝试解决。
      • wuball:不是用 “Pomelo.EntityFrameworkCore.MySql” 替换 “Microsoft.EntityFrameworkCore.SqlServer” 吗?
        圣杰:@wuball . net core 用的是这个
      • 耕云种月_:前人种树,后人乘凉:smile:

      本文标题:ABP入门系列(21)——切换MySQL数据库

      本文链接:https://www.haomeiwen.com/subject/nytnvxtx.html