使用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,運行網站,可以看到我們網站正常運行了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM