首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

NHibernate 基礎配置完整指南:從環境建置到常見錯誤排除

     編輯:關於.NET

前言

對初學者而言,NHibernate 最大的門檻往往在於「配置」。相較於 LINQ to SQL 或 Entity Framework 的開箱即用,NHibernate 需要映射檔案、設定檔、組件參考等多重配置。本文整理實戰經驗,帶您從零建置 NHibernate 環境,並解決常見配置陷阱。

開發環境

  • Visual Studio 2008 SP1
  • NHibernate 2.1.2.GA-bin

一、啟用 Visual Studio 智能提示

編寫 .hbm.xml 映射檔時,若無智能提示極易出錯。解決方法:

  1. 從 NHibernate 安裝目錄找到兩個 XSD 檔案:
    • nhibernate-mapping.xsd
    • nhibernate-configuration.xsd
  2. 複製到 VS 架構目錄:
    C:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas\
  3. 重啟 VS,編輯映射檔即可享有完整 IntelliSense

提示:NHibernate 版本不同,XSD 檔案位置可能不同。2.1.2 版在 Required_Bins 資料夾下;舊版可能在 src\NHibernate.Config.Templates。

二、必要組件參考

專案需引用下列組件(2.1.2 版):

組件用途
NHibernate.dll核心庫
NHibernate.ByteCode.Castle.dllCastle 動態代理(延遲載入必須)
Antlr3.Runtime.dllHQL 查詢解析
Iesi.Collections.dll集合類型支援
log4net.dll日誌記錄
Castle.Core.dllCastle 核心(代理工廠設為 Castle 時需求)
Castle.DynamicProxy2.dll動態代理實作

版本差異提醒:NHibernate 2.0.1 可不設定 proxyfactory.factory_class;但 2.1.2 版必須明確指定代理工廠,否則延遲載入失效。

三、映射檔案設為「嵌入資源」

所有 *.hbm.xml 檔案在屬性視窗中,將 Build Action 設為 Embedded Resource。否則執行時會拋出找不到映射資源的異常。

四、unsaved-value 設定

識別物件是否為暫態(未持久化)的關鍵:

  • 整數主鍵:unsaved-value="0"
  • Guid 主鍵:unsaved-value="00000000-0000-0000-0000-000000000000"
  • 字串主鍵:unsaved-value="null" 或空字串

詳細說明請參考:CSDN 部落格文章

五、NHibernate 設定檔配置

  1. 從 Configuration_Templates 資料夾複製對應資料庫的設定檔(如 hibernate.cfg.xml)
  2. 關鍵步驟:在 <session-factory> 區段加入組件對應:
    <mapping assembly="Model" />
  3. 設定資料庫連線字串、方言、連線提供者等參數

常見錯誤:預設模板缺少 mapping assembly 設定,必須手動加入,否則會出現「找不到持久化類別」異常。

六、映射檔 class 節點屬性正確性

錯誤的 name、assembly、namespace 會導致:

NHibernate.MappingException: persistent class not found

檢查清單:

  • name:完整類型名稱(含命名空間)
  • assembly:組件名稱(不含 .dll)
  • namespace:命名空間(可選,若 name 已含完整命名空間可省略)

七、NHibernate 2.1.2 版關鍵變更

  • 必須設定延遲載入方式(proxyfactory.factory_class)
  • 設定檔不需設為「永遠複製」,預設即可
  • 相依組件增加(因強制需代理工廠)
  • 所有實體類別屬性必須標記 virtual(除非明確關閉延遲載入)

八、配置檢查清單總結

檢查項目正確設定
映射檔 Build ActionEmbedded Resource
hibernate.cfg.xml 中 mapping assembly已加入實體類別所在組件名稱
資料庫連線字串正確且可連線
proxyfactory.factory_class已設定(如 Castle)
必要 DLL 皆已參考版本一致
實體類別屬性標記 virtual
unsaved-value符合主鍵型別預設值

總結

NHibernate 配置雖繁瑣,但遵循「映射檔嵌入資源、設定檔加入組件對應、代理工廠必須指定、版本相依組件齊全」四大原則,即可避開 90% 的初學者陷阱。建議新手先從簡單單表操作起步,逐步掌握映射技巧,再挑戰複雜關聯配置。

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