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

NHibernate ISessionFactory 配置全攻略:三種映射載入方式與最佳實踐

     編輯:關於.NET

核心架構:Configuration → ISessionFactory → ISession

Configuration 是**啟動階段**物件,負責收集映射資訊並編譯為不可變的 ISessionFactory。ISessionFactory 為**執行緒安全**單例,全應用程式共享。

三種映射載入方式

方式一:直接載入 .hbm.xml 檔案

Configuration cfg = new Configuration()
    .AddXmlFile("User.hbm.xml")
    .AddXmlFile("Order.hbm.xml");
  • 適用於少量映射檔、檔案路徑固定
  • 硬編碼檔名,維護性較差

方式二:透過實體類別載入內嵌資源

Configuration cfg = new Configuration()
    .AddClass(typeof(User))
    .AddClass(typeof(Order));
  • 映射檔需設為 Embedded Resource,命名慣例:{Namespace}.{ClassName}.hbm.xml
  • NHibernate 內部呼叫 Assembly.GetManifestResourceStream() 載入
  • 消除檔名硬編碼,重構安全

方式三:掃描整個組件載入所有映射 (推薦)

Configuration cfg = new Configuration()
    .AddAssembly("MyDomainModel"); // 或 Assembly.GetExecutingAssembly()
  • 自動掃描組件中所有 *.hbm.xml 內嵌資源
  • 新增實體無需修改配置代碼,零維護成本
  • 適合領域模型組件獨立部署架構

建立 ISessionFactory

ISessionFactory factory = cfg.BuildSessionFactory();
  • 昂貴操作,**應用程式啟動時建立一次**,單例模式持有
  • 可建立多個 Factory 對應不同資料庫

進階:自訂 ADO.NET 連線

IDbConnection conn = MyApp.GetOpenConnection(); // 連線池、加密連線字串等自訂邏輯
ISession session = factory.OpenSession(conn);

限制:同一連線上不能開啟兩個平行 ISession。

最佳實踐總結

  1. Configuration 僅用於啟動配置,建立首個 ISessionFactory 後即可丟棄
  2. 優先使用 AddAssembly,配合內嵌資源實現約定優於配置
  3. ISessionFactory 為單例,使用靜態屬性或 IoC 容器管理
  4. ISession 為非執行緒安全,每請求/每交易一個 (Session-per-Request 模式)
  5. Fluent NHibernate / Auto-mapping:現代專案建議改用 Fluent API 或慣例自動映射,完全捨棄 XML
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved