首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SPL 3.2 升級全面支援 MySQL:.NET ORM 框架多資料庫適配實戰

     編輯:MySQL 綜合教學

SPL (Simple Persistence Layer) 升級至 3.2 版本,正式引入 MySQL 資料庫完整支援,並強化 Bit 型別映射、資料庫廠商判斷、保留字相容、NULL 查詢、DateTime 處理等核心功能。本文詳細解析升級亮點、MySQL 接入配置、實體映射與動態 SQL 組裝實戰,助 .NET 開發者快速落地多資料庫架構。

一、核心升級亮點

功能說明實戰價值
MS SQL Bit 型別支援映射為 boolean,實體屬性 bool,Condition 可直接比較消除 0/1 與 true/false 手動轉換
資料庫廠商判斷 APISetting.Instance().GetDatabaseVendor(dbName) 回傳 DatabaseVendor 列舉手寫 SQL 時動態組裝差異語法(如日期格式 #...# vs '...')
全保留字相容Oracle ""、SQL Server []、MySQL ` 自動加定界符實體/欄位命名不再受保留字限制
NULL 值查詢支援c.AddEqualTo("col", DBNull.Value) / AddNotEqualTo優雅處理可為空欄位的 IS NULL/IS NOT NULL
MySQL 完整支援採用官方 MySql.Data Connector,配置 type="MySql" 即可零代碼變更遷移至 MySQL,測試全通過
DateTime.Null 處理實體賦值 DateTime.MinValue 自動轉為 DBNull.Value 入庫解決 DateTime 非可空型別無法直接賦 NULL 的痛點
UpdateCriteria 屬性名修正修復屬性名≠欄位名時更新失效 Bug映射彈性大幅提升

二、MySQL 接入配置範例

在 DatabaseMap.config 中新增:

<database name="MySqlDB" type="MySql">
  <parameter name="User Id" value="root"/>
  <parameter name="Data Source" value="localhost"/>
  <parameter name="Database" value="mysql"/>
  <parameter name="password" value=""/>
  <classMapFile path="ClassMap.xml"/>
</database>

需預先安裝 MySql.Data 驅動(NuGet: MySql.Data 或官網下載)。

三、ClassMap 映射範例(含 Bit/DateTime)

<classMap table="Orders">
  <id name="OrderId" column="OrderId" type="int" generator="identity"/>
  <property name="IsOver" column="IsOver" type="boolean"/>  <!-- Bit 映射 -->
  <property name="CreateDate" column="CreateDate" type="DateTime"/>
</classMap>

對應實體:

public class Order {
    public int OrderId { get; set; }
    public bool IsOver { get; set; }
    public DateTime CreateDate { get; set; } // 設 MinValue 即存 NULL
}

四、動態 SQL 組裝:根據廠商切換語法

var vendor = Setting.Instance().GetDatabaseVendor("MySqlDB");
string dateFmt = (vendor == DatabaseVendor.MsAccess) ? "#{0}-{1}-{2}#" : "'{0}-{1}-{2}'";
string sql = string.Format("SELECT * FROM Orders WHERE CreateDate <= " + dateFmt, y, m, d);

此機制讓手寫 SQL 區塊也能優雅適配多資料庫,避免硬編碼分支散落業務邏輯。

五、測試驗證清單(官方回歸測試)

  • ✅ 實體 CRUD 測試通過
  • ✅ RetrieveCriteria / UpdateCriteria / DeleteCriteria 通過
  • ✅ Transaction 事務測試通過
  • ✅ 自增主鍵測試通過
  • ✅ TOP/LIMIT 功能測試通過(MySQL 使用 LIMIT n)

六、遷移與升級建議

  1. NuGet 更新 SPL 至 3.2.0.4+,覆蓋舊 DLL
  2. 專案加入 MySql.Data 參考
  3. DatabaseMap 新增 MySQL 節點,ClassMap 維持不變
  4. 連接字串參考官方格式:Server=localhost;Database=test;Uid=root;Pwd=xxx;Charset=utf8mb4;
  5. 全量回歸測試,重點驗證:Bit 欄位讀寫、DateTime NULL 處理、動態 SQL 多廠商切換

七、總結

SPL 3.2 以「零侵入適配 MySQL」為核心亮點,配合廠商判斷 API、保留字自動轉義、NULL 語意統一等工程化細節,讓 .NET 團隊以極低成本擁抱 MySQL 生態,實現真正的多資料庫彈性架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved