• 使用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,运行网站,可以看到我们网站正常运行了。

  • 相关阅读:
    Saslauthd服务实现SMTP发信认证
    携程Apollo一键编译脚本+部署实现
    Shell编程总结
    Oracle数据库的安装 【超详细的文图详解】
    区块链技术开发导向 聊应用及正确发展方向
    单机Qps上限是多少?
    Linux运维第二课----Linux发展史、环境准备
    JAVA_新建一个方法并且求三个数中的最大值
    iOS视频边下载边播放
    Python从零搭建Conf_Web配置管理平台
  • 原文地址:https://www.cnblogs.com/studyzy/p/5850992.html
Copyright © 2020-2023  润新知