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

NHibernate 物件狀態全圖譜:瞬時、持久、脫管三態轉換與版本控制

     編輯:關於.NET

三大物件狀態

狀態定義識別碼資料庫記錄Session 關聯
瞬時新建未關聯 Session空(自動生成時)無無
持久已儲存或已載入已賦值有當前 Session 有效
脫管Session 關閉後保留有無

狀態轉換操作

瞬時 → 持久

  • Save(obj):持久化新物件,自動生成 ID 回寫
  • SaveOrUpdate(obj):新物件分配 ID 儲存

持久 → 脫管

  • Evict(obj):從當前 Session 移除
  • Close():關閉 Session,所有關聯物件脫管

脫管 → 持久

  • Update(obj):更新脫管物件,**脫管期間修改會同步持久化**
  • Lock(obj, LockMode.None):重新關聯,**未修改則不執行 UPDATE**(僅狀態轉換)
  • Merge(obj):合併,不考慮 Session 狀態,以傳入物件覆蓋同 ID 持久物件
  • SaveOrUpdate(obj):新物件存、脫管物件更新/重新關聯

版本控制與髒檢查

映射檔 <id>、<version> 設 unsaved-value,NHibernate 才能判斷脫管物件是否「髒」(被修改),決定是否執行 UPDATE。

程式碼驗證範例

  • Update:脫管修改 Firstname → 呼叫 Update → 執行 UPDATE
  • Lock(LockMode.None):脫管**未修改** → 呼叫 Lock → **無 UPDATE**,僅轉持久
  • Merge:Session 已有同 ID 物件 → 以傳入物件覆蓋
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved