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”结尾的项目中去,如下图:

注意版本号,安装最新,我可不保证可以成功!
修改“.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,带给大家进阶分享,尽情期待!

ABP入门系列(21)——切换MySQL数据库的更多相关文章

  1. ABP学习之路--切换mysql数据库

    1.添加mysql相关引用 注意,使用最新版本会导数据迁移时出错 2.修改链接字符串: <add name="Default" connectionString=" ...

  2. ABP入门系列(13)——Redis缓存用起来

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 引言 创建任务时我们需要指定分配给谁,Demo中我们使用一个下拉列表用来显示当前系统的所有用 ...

  3. ABP入门系列(2)——通过模板创建MAP版本项目

    一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...

  4. ABP入门系列(4)——领域层定义仓储并实现

    一.先来介绍下仓储 仓储(Repository): 仓储用来操作数据库进行数据存取.仓储接口在领域层定义,而仓储的实现类应该写在基础设施层. 在ABP中,仓储类要实现IRepository接口,接口定 ...

  5. ABP入门系列(3)——领域层创建实体

    这一节我们主要和领域层打交道.首先我们要对ABP的体系结构以及从模板创建的解决方案进行一一对应.网上有代码生成器去简化我们这一步的任务,但是不建议初学者去使用. 一.首先来看看ABP体系结构 领域层就 ...

  6. ABP入门系列(5)——创建应用服务

    一.解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象来执行相应的业务逻辑并且将DTO返回给展现层.因此,展现 ...

  7. ABP入门系列(11)——编写单元测试

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 前言 In computer programming, unit testing is a ...

  8. ABP入门系列(14)——应用BootstrapTable表格插件

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 引言 之前的文章ABP入门系列(7)--分页实现讲解了如何进行分页展示,但其分页展示仅适用于 ...

  9. ABP入门系列(16)——通过webapi与系统进行交互

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 引言 上一节我们讲解了如何创建微信公众号模块,这一节我们就继续跟进,来讲一讲公众号模块如何与 ...

随机推荐

  1. robotframework自动化系列:新增流程

    刚接手项目的时候,要求所有流程在上线之前必须确保正向操作是正确的:这个时候又有新的模块需要测试,所以引入自动化测试是非常有必要的!通过对比,尝试使用RF进行自动化的回归测试. 测试中最常见的操作就是增 ...

  2. Maven元素解析——pom.xml

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6628201.html  一个pom.xml中包含了许多标签,各个标签是对项目生命周期.依赖管理的配置.常用的主 ...

  3. SEO内链操作的技巧大家又知道多少

    关于一个优质的网站而言,一套优质的内部优化链接体系是必不可少的,简略来说杰出的内链体系能让网站页面之前彼此传递权重,协助搜索引擎快速辨认网站内容的中心,可是SEO内链操作的技巧我们又知道多少?下面齐鲁 ...

  4. 在foreach的判断条件里执行方法会有效率问题吗?

    楼猪平时一有空就有看别人代码的习惯,从许多优秀规范的代码中学习到了很多简约高效的写法和画龙点睛的思想精华.但是有的时候也会觉得某些写法很值得玩味.比如刚看到一段代码,在foreach的条件判断里加了一 ...

  5. 通过游戏认识 --- JQuery与原生JS的差异

      前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write ...

  6. .Net 多线程开发优化实践

    互联网产品中微服务.高并发已经成为最基本的要求.所谓高并发就是在同一时刻处理多个服务请求.为了提高高并发场景下的系统稳定性,负载均衡.消息队列等框架和技术应运而生,有效的缓解了高并发对系统整体压力.无 ...

  7. 2735:八进制到十进制-poj

    总时间限制:  1000ms 内存限制:  65536kB 描述 把一个八进制正整数转化成十进制. 输入 一行,仅含一个八进制表示的正整数a,a的十进制表示的范围是(0, 65536). 输出 一行, ...

  8. thinkphp做搜索功能

    一般后台都需要做一些搜索功能,直接上图. 至于前端页面大家自己设计.

  9. 中英文代码对比系列之Java一例

    原文: https://zhuanlan.zhihu.com/p/30905033. 作者为本人. 这个系列将对同一段代码进行中文命名和英文命名两个版本的比较. 目的包括, 演示中文命名, 发现命名时 ...

  10. Loadrunner手动编写包含事务、检查点、关联等元素的脚本实例

    一.前言: 本文适合初学者,包含很多细节,包括 二.准备: 1.以虚拟机中的Linux系统作为服务器,开启bugfree服务. 2.以fiddler作为抓包工具,辅助脚本开发. 3.脚本流程:bugf ...