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
有兩種不同的方式, 完成這個結果:
- 替換掉 EntityFramework Code first: 參考 以 SQL 實作 ASP.NET Identity的改法, 從網站樣本開始, 改用本文提供的程式庫, 修改成使用 MySQL SQL Script.
- 替換掉 SQL Server 程式庫:以 SQL 實作 ASP.NET Identity為基礎, 改為使用本文提供的 MySQL 程式庫.
還有一種方法更簡單: 直接取用本文完成的結果
WebAuthMySQL.
第1種改法, 概念跟原來的方式相同, 只要改用"本文的程式庫"就可以完成, 因此不重複贅述.
第2種改法, 概念是將
SQL Server 程式庫 替換成 MySQL 程式庫, 步驟如下:
- 取得網站專案 WebAuthSQL
從 WebAuthSQL取得網站專案編譯完成, 並且測試成功後, 將 WebAuthSQL 的 Solution 及 Project 名稱都改為 WebAuthMySQL. 作為本文要修改的 Solution 及 Project.
- 將 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 分層如下:
- Application
- WebAuthMySQL: 網站
- LibSQL: 網站資料處理程式庫
- Library
- ZLib: 跨 application 公用程式庫, 內含存取 SQL Server 程式庫.
- ZLibMySQL: MySQL 資料庫程式庫, 外掛方式, 若需要用到才加入, 否則可不存在.
- 修改程式庫 LibSQL
存取資料庫的程式, 集中在 LibSQL 專案中, 原本透過 ZLib.ZSqlClient 存取 SQL Server 資料庫, 現在通通改成 ZLib.ZMySqlClient 物件如下圖,
- 修改 Application
將 ApplicationDBContext 繼承對象改成 ZMySqlClient (在 /Models/IdentityModels.cs 中):
- 修改 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" />
- 建立新資料庫
參考 CreateDBAspNet1-MySQL.sql
建立 MySQL 新資料庫 DBAspNet1
- 編譯執行測試