現狀:NHibernate 更新快,網上教程多基於舊版 (3.x/4.x),API、配置、Mapping 風格差異大,照著敲報錯。
學習正確姿勢
- 閱讀官方文檔 (最新版):NHibernate Reference Documentation — 涵蓋配置、Mapping (XML/Fluent/Attribute)、查詢 (HQL/LINQ/Criteria)、事務、緩存。
- 掌握核心概念而非步驟:
- Session / SessionFactory 生命週期
- 實體狀態 (Transient/Persistent/Detached)
- 延遲載入 / 抓取策略
- 事務邊界與隔離級別
- 二級緩存架構
- 動手建最小專案:
- Console App + SQLite (零配置) → 驗證 Mapping、CRUD、Lazy Load。
- 遷移到 SQL Server/PostgreSQL → 體驗方言、連接池、批次處理。
- 參考成熟開源專案:
- nhibernate-samples 官方範例庫。
- FluentNHibernate 強型別 Mapping 風格 (現代主流)。
避坑指南
- **不要照抄 5 年前部落格的 `hibernate.cfg.xml`**,屬性名、驅動類、方言類可能已棄用。
- **Mapping 優先用 Fluent/Attribute**,XML 維護成本高、易拼錯。
- **Session 嚴禁長生命週期** (如靜態變數、跨請求),請求級 `Open Session in View` 或 `Per Request` 模式。
- **升級前跑完整測試套件**,NHibernate 微版本常修正行為細節 (如集合排序、級聯刪除順序)。
結論:**版本差異是常態,理解原理才能舉一反三。** 公司專案用什麼版本,就對著該版本文檔+原始碼學。