使用ABP EntityFramework连接MySQL数据库
ASP.NET Boilerplate(简称ABP)是在.Net平台下一个很流行的DDD框架,该框架已经为我们提供了大量的函数,非常方便与搭建企业应用。
关于这个框架的介绍我就不多说,有兴趣的可以参见官方文档:http://www.aspnetboilerplate.com/Pages/Documents
使用ABP+EF+SQL Server是比较推荐的组合,但是既然我们使用的是EF,那么就应该是和数据库分离的,也就意味着我们应该可以采用其他的数据库,比如MySQL。
ABP初始化的项目模板还提供了Module Zero项目,为我们提供了用户、角色、权限等等通用功能,但是在使用初始化的模板连接MySQL却会报错,无法运行,下面我来解决ABP+MySQL的问题。这是操作步骤:
1.从官方网站下载ABP项目模板,并解压到本地,用VS打开,这里我们新建一个项目ConnectMySql。
2.设置XXX.Web为启动项目,Build这个Solution,使得NuGet下载相关的包。
3.准备好一个SQL Server数据库,修改Web.config数据库的ConnectionString,连接到SQL Server数据库。
4.打开Package Manager Console窗口,选择XXX.EntityFramework为默认项目,运行Update-Database命令,系统会在SQL Server中创建数据库和对应的表。

5.打开SSMS,连接到上一步新建的数据库,选择生成脚本命令,并在高级选项中选择“Schema and data”生成一个创建表和填充数据的脚本文件。
6.接下来就是比较繁琐的SQL Server脚本转MySQL脚本了,我采用NotePad++,做了多次的批量替换,把脚本转换成MySQL支持的内容。
为了方便大家,我直接把转换好的SQL脚本放出,大家直接运行即可。 脚本下载
7.打开MySQL Server,新建一个MySQL数据库,并运行前一步骤准备好的脚本。
8.我们回到VS,为XXX.EntityFramework和XXX.Web,通过Nuget添加MySql.Data.Entity:

9.打开Web项目的Web.config,由于上一步添加了MySql.Data.Entity,所以Web.config已经添加了MySql的相关配置。我们只需要修改连接字符串,注释掉SQL Server的字符串,添加新的连接字符串:
<add name="Default" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;port=3306;database=test;uid=root;password=xxx" />
10.打开EntityFramework项目的Configuration对象,在Migrations文件夹中,修改构造函数,指定使用MySQL的SQL生成器。
public Configuration()
{
AutomaticMigrationsEnabled = false;
ContextKey = "ConnectMySql";
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
}
11.现在我们来试一试是否可以针对MySQL使用EF的Code First。我们在XXX.Core中创建一个测试用的实体Student:
public class Student:Entity
{
[StringLength(50)]
public string Name { get; set; }
public DateTime Birthdate { get; set; }
public bool Gender { get; set; }
}
12.在XXX.EntityFramework中找到ConnectMySqlDbContext,并添加Student的应用:
public class ConnectMySqlDbContext : AbpZeroDbContext<Tenant, Role, User>
{
//TODO: Define an IDbSet for your Entities...
public IDbSet<Student> Students { get; set; }
/* NOTE:
* Setting "Default" to base class helps us when working migration commands on Package Manager Console.
* But it may cause problems when working Migrate.exe of EF. If you will apply migrations on command line, do not
* pass connection string name to base classes. ABP works either way.
*/
public ConnectMySqlDbContext()
: base("Default")
{
}
……
13.我们编译一下这个Solution,然后在Package Manager Console窗口中,输入命令Add-Migration AddStudent,这里的AddStudent是对我们这次更改的一个命令。命令运行完成后,在Migrations文件夹中,会创建升级数据库的C#代码。

14.继续在Package Manager Console窗口中,输入命令Update-Database,系统会将数据库更改应用到我们的MySQL数据库中。

15.我们到MySQL数据库中,刷新,可以看到系统自动创建了Students数据库:

16.最后,我们Build整个Solution,运行网站,可以看到我们网站正常运行了。
使用ABP EntityFramework连接MySQL数据库的更多相关文章
- MVC3、如何应用EntityFramework 连接MySql 数据库
原文:MVC3.如何应用EntityFramework 连接MySql 数据库 新的一年,新的开始. 今天总结的主题是在MySql中应用EntityFramework 的Code First模式. 开 ...
- ABP框架连接Mysql数据库
开始想用Abp框架来搭建公司的新项目,虽然一切还没有定数,但是兵马未动,粮草先行,我先尝试一下整个过程,才能够更好的去争取机会. 此次技术选型:Abp(Asp.Net core mvc)+mysql( ...
- EntityFramework 6.0< Code First > 连接 Mysql数据库(转)
http://blog.csdn.net/kmguo/article/details/19650299 网上有很多关于用EntityFrame来连接Mysql数据库的教程,可是很多并不靠谱,转载的太多 ...
- EntityFramework 6.0< Code First > 连接 Mysql数据库
网上有很多关于用EntityFrame来连接Mysql数据库的教程,可是很多并不靠谱,转载的太多了.找了很久,总算是配置好了,现在分享一下. 一,安装: 1.开发环境: VS2013与EF6 ...
- 转载:EntityFramework 6.0< Code First > 连接 Mysql数据库
转载自:http://blog.csdn.net/kmguo/article/details/19650299 网上有很多关于用EntityFrame来连接Mysql数据库的教程,可是很多并不靠谱,转 ...
- Entity Framework连接Mysql数据库并生成Model和DAL层
Entity Framework (EF,ADO.NET Entity Framework)是微软官方提供的.NET平台的ORM框架.相比于LINQ TO SQL,EF框架具有很明显的优势: EF框架 ...
- Vs2013 使用EF6 连接mysql数据库
最近在使用MySQL数据库,在使用EF框架连接MySQL数据库时发现了一个问题,使用DB First创建实体对象的时候会出现如下图的错误:您的项目引用了最新版实体框架….. (如下图)或者会出现新建实 ...
- 使用EF CodeFirst连接MySql数据库
如何使用EF CodeFirst连接MySql数据库? 我们这篇文章介绍怎么使用EF连接MySql 作者的环境 VS2017.Win10.MySql5.x 前言 一般在EF中,默认是使用SqlServ ...
- 使用VS2013 + EF6 连接Mysql数据库
使用VS2013 + EF6 + .NET4.5 连接Mysql数据库 1.安装插件 在使用Visual Studio 2013添加ADO.NET实体数据模型新建连接时,默认是没有Mysql选项的.此 ...
随机推荐
- Hadoop相关日常操作
1.Hive相关 脚本导数据,并设置运行队列 bin/beeline -u 'url' --outputformat=tsv -e "set mapreduce.job.queuename= ...
- string length() 方法注意点
突然意识到string length() 是跟文件的字符编码相关的 测试了下, 果然如此: 对于常见字, 结果是一样的, System.out.println("T中国123".l ...
- iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处
NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是简单的终止程序,而NSAssert会报告出错误信息并且打印出来.所以尽管的使用NSAssert,可以不去使用asser ...
- Git异常:fatal: V1.0 cannot be resolved to branch.
GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出
系列目录 昨天文章太过仓促没有补充导出的示例源码,在者当时弄到到很晚没时间做出导出功能,对阅读理解造成影响,现补充一份示例源码,顺便补充导出的功能说明,望理解 示例代码下载 https://yun ...
- Oracle_数据处理
数据操纵语言 DML(Data Manipulation Language – 数据操纵语言) 可以在下列条件下执行: - 向表中插入数据 - 修改现存数据 - 删除现存数据* 事务是由完成若干项工作 ...
- .NET MVC4 Razor视图预编译(一)
在平时使用.NET MVC中不乏有类似的需求:某些razor视图,特别是系统后台的视图,不想让用户自行更改,需要通过某种方法把视图模板编译到项目的dll中去. 但是VS并不提供razor的预编译,如果 ...
- clipChildren和clipToPadding
clipChildren 和 clipToPadding clipChild 用于定义子控件是否在父控件边界内进行绘制.clipChild 默认为 true.也就是不允许进行扩展绘制. clipToP ...
- Java多种方式动态生成doc文档
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5280272.html 本来是要在Android端生成doc的(这需求...),最后方法没有好的方法能够在An ...
- 探寻 JavaScript 逻辑运算符(与、或)的真谛
十二月已经过半,冬季是一个美妙的季节,寒冷的空气逼得人们不得不躲在安逸舒适的环境里生活.冬季会给人一种安静祥和的氛围,让人沉浸在其中,仿佛是一个旧的阶段的结束,同时也是一个新的阶段的开始.这么说来,西 ...