开发者社区> 深蓝居> 正文

使用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中创建数据库和对应的表。

image

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:

image

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#代码。

image

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

image

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

image

16.最后,我们Build整个Solution,运行网站,可以看到我们网站正常运行了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL连接错误,使用Navicat连接MySQL出现访问被拒错误的情况:
MySQL连接错误,使用Navicat连接MySQL出现访问被拒错误的情况:
14 0
MySQL连接IDEA详细教程
使用IDEA的时候,需要连接Database,连接时遇到了一些小问题,下面记录一下操作流程以及遇到的问题的解决方法。
30 0
错误代码:2013查询期间丢失与MySQL服务器的连接
错误代码:2013查询期间丢失与MySQL服务器的连接
21 0
【MySQL】(图解)快速理解内连接、外连接、左连接、右连接
【MySQL】(图解)快速理解内连接、外连接、左连接、右连接
11 0
运维 ---Docker部署mysql后使用Navicat尝试连接遇到1251报错问题的解决方法
运维 ---Docker部署mysql后使用Navicat尝试连接遇到1251报错问题的解决方法
22 0
mysql 内连接、左连接(左外连接)、右连接(右外连接)、全连接(全外连接)
mysql 内连接、左连接(左外连接)、右连接(右外连接)、全连接(全外连接)
37 0
如何使用码匠连接 MySQL
目前码匠已经实现了与 MySQL 数据源的连接,支持书写 SQL 语句,也支持通过图形化界面对数据进行增、删、改、查, 同时还支持将数据绑定至各种组件,并通过简单的代码实现数据的可视化和计算等操作,能让您快速、高效地搭建应用和内部系统。
21 0
【Java】Java连接Mysql数据库的demo示例
【Java】Java连接Mysql数据库的demo示例
21 0
Egg 项目怎么连接 MySQL 实现增删改查接口?
Egg 项目怎么连接 MySQL 实现增删改查接口?
19 0
NET连接MySQL数据库的CRUD
NET连接MySQL数据库的CRUD
17 0
+关注
深蓝居
关注于区块链技术、跨链、密码学、通证经济、智能合约
文章
问答
文章排行榜
最热
最新
相关电子书
更多
让 MySQL 原生分布式触手可及
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载
云数据库RDS MySQL从入门到高阶
立即下载