SPL (Simple Persistence Layer) 升級至 3.2 版本,正式引入 MySQL 資料庫完整支援,並強化 Bit 型別映射、資料庫廠商判斷、保留字相容、NULL 查詢、DateTime 處理等核心功能。本文詳細解析升級亮點、MySQL 接入配置、實體映射與動態 SQL 組裝實戰,助 .NET 開發者快速落地多資料庫架構。
| 功能 | 說明 | 實戰價值 |
|---|---|---|
| MS SQL Bit 型別支援 | 映射為 boolean,實體屬性 bool,Condition 可直接比較 | 消除 0/1 與 true/false 手動轉換 |
| 資料庫廠商判斷 API | Setting.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 | 映射彈性大幅提升 |
在 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 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
}
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 區塊也能優雅適配多資料庫,避免硬編碼分支散落業務邏輯。
LIMIT n)SPL 至 3.2.0.4+,覆蓋舊 DLLMySql.Data 參考Server=localhost;Database=test;Uid=root;Pwd=xxx;Charset=utf8mb4;SPL 3.2 以「零侵入適配 MySQL」為核心亮點,配合廠商判斷 API、保留字自動轉義、NULL 語意統一等工程化細節,讓 .NET 團隊以極低成本擁抱 MySQL 生態,實現真正的多資料庫彈性架構。