From: 011netservice@gmail.com
Date: 2022-04-22
Subject: 以 SQL 實作 ASP.NET Identity for MySQL

本文介紹以 SQL script 的方式 實作 ASP.NET Identity for MySQL, 替換掉 EntityFramework Code first.
see also: 以 SQL 實作 ASP.NET Identity

有兩種不同的方式, 完成這個結果:
  1. 替換掉 EntityFramework Code first: 參考 以 SQL 實作 ASP.NET Identity的改法, 從網站樣本開始, 改用本文提供的程式庫, 修改成使用 MySQL SQL Script.
  2. 替換掉 SQL Server 程式庫:以 SQL 實作 ASP.NET Identity為基礎, 改為使用本文提供的 MySQL 程式庫.
還有一種方法更簡單: 直接取用本文完成的結果 WebAuthMySQL.

第1種改法, 概念跟原來的方式相同, 只要改用"本文的程式庫"就可以完成, 因此不重複贅述.
第2種改法, 概念是將 SQL Server 程式庫 替換成 MySQL 程式庫, 步驟如下:
  1. 取得網站專案 WebAuthSQL
    WebAuthSQL取得網站專案編譯完成, 並且測試成功後, 將 WebAuthSQL 的 Solution 及 Project 名稱都改為 WebAuthMySQL. 作為本文要修改的 Solution 及 Project.

  2. 將 System.Data.SqlClient 改為使用 MySql.Data.MySqlClient 元件
    本步驟若以 ZLib 的規劃方式, 則只需要在 solution 中, 多加引用外掛 ZLibMySql 程式庫即可, 否則可參考 ZLibMySql 專案, 自行撰寫存取 MySQL 資料庫的程式庫替換.
    詳細說明如下:
    ZLibMySql 外掛程式庫, 已安裝需要的 MySQL 元件版本:



    ZLibMySql 外掛程式庫, 也已實作了存取 MySQL 資料庫的方法, 並且以同樣的介面提供給 Application 使用如下:
    ZMySqlClient.cs : 外掛於ZLib程式庫, 可存取 MySQL 資料庫.
    ZSqlClient.cs: 內建於ZLib程式庫, 可存取 SQL Server 資料庫.


    透過封裝不同的資料庫的 API, 再以一致性的介面, 提供前端 Application 使用. 前端 Application 就能以相同程式, 存取不同的資料庫; 不會因為資料庫來源不同, 要多寫不同的程式.

    Solution WebAuthMySQL 分層如下:
    1. Application
      1. WebAuthMySQL: 網站
      2. LibSQL: 網站資料處理程式庫
    2. Library
      1. ZLib: 跨 application 公用程式庫, 內含存取 SQL Server 程式庫.
      2. ZLibMySQL: MySQL 資料庫程式庫, 外掛方式, 若需要用到才加入, 否則可不存在.



  3. 修改程式庫 LibSQL
    存取資料庫的程式, 集中在 LibSQL 專案中, 原本透過 ZLib.ZSqlClient 存取 SQL Server 資料庫, 現在通通改成 ZLib.ZMySqlClient 物件如下圖,

  4. 修改 Application
    將 ApplicationDBContext 繼承對象改成 ZMySqlClient (在 /Models/IdentityModels.cs 中):



  5. 修改 ConnnectionString
    將 Web.config 中的Connection String 設定, 改到你的 MySQL 資料庫位置如下:
    <add name="DefaultConnection" connectionString="server=localhost;port=3306;database=dbaspnet1;user=uMySQL;password=P@ssword;SslMode=none;" providerName="MySql.Data.MySqlClient" />

  6. 建立新資料庫
    參考 CreateDBAspNet1-MySQL.sql 建立 MySQL 新資料庫 DBAspNet1

  7. 編譯執行測試

C# CodeHelper | 011