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

NHibernate實戰(15):存儲過程應用入門——MyGeneration生成與刪除操作

     編輯:關於.NET

前言

繼視圖應用後,本系列將用三篇幅深入講解 NHibernate 中存儲過程的完整應用流程。所有內容源自實戰經驗,涵蓋錯誤排查、存儲過程修改、與原生操作差異對比,非官方權威文檔,請開發者酌情參考。

使用 MyGeneration 快速生成存儲過程

為專注 NHibernate 整合而非 T-SQL 編寫,採用 MyGeneration 代碼生成工具為 Customer 表生成增刪改存儲過程。

環境配置步驟

  1. 安裝 MyGeneration:首次運行自動彈出「默認設置」對話框,需配置資料庫連接字串、模板語言、驅動程式、模板路徑等
  2. 資料庫連接配置:點擊「OLEDB...」按鈕透過圖形介面設定 SQL Server 連接資訊,確定後保存配置
  3. Vista/Win7+ 權限提示:必須以「管理員身份運行」MyGeneration,否則配置與模板無法保存

生成存儲過程實操

  1. 打開主介面,點擊工具列第三個按鈕開啟「模板瀏覽器」
  2. 展開 Microsoft SQL Server 節點,找到 Script Insert/Update/Delete Procedures for SQL Server 模板
  3. 右鍵選擇執行,指定輸出路徑(如桌面)與目標表 Customer,點擊 OK
  4. 生成 sql_procs_Customer.sql,在 SSMS 中執行腳本
  5. 驗證:資料庫 NHibernateSample 下出現三個存儲過程——CustomerDelete、CustomerInsert、CustomerUpdate

實戰案例:刪除操作存儲過程整合

測試代碼沿用系列第 6 篇事務與第 5 篇 CRUD 操作,無需修改。

步驟 1:基準測試——原生刪除 SQL

DELETE FROM Customer WHERE CustomerId = @p0 AND Version = @p1; @p0 = '7', @p1 = '1'

包含版本控制欄位 Version,實現樂觀並發。

步驟 2:映射文件配置

修改 Customer.hbm.xml,在 <class> 下添加:

<sql-delete>exec CustomerDelete ?</sql-delete>

對應存儲過程單一 @CustomerId 參數。

步驟 3:並發異常與 SET NOCOUNT ON

執行報錯 StaleObjectStateException,修改存儲過程註釋 SET NOCOUNT ON:

ALTER PROCEDURE [dbo].[CustomerDelete]
(@CustomerId int)
AS
-- SET NOCOUNT ON
DELETE FROM [Customer] WHERE [CustomerId] = @CustomerId
RETURN @@Error

步驟 4:驗證參數缺失問題

執行成功但發現 NHibernate 生成 SQL 多出 @p1 參數:

exec CustomerDelete @p0; @p0 = '6', @p1 = '1'

存儲過程未處理版本控制,導致邏輯不一致。

步驟 5:存儲過程加入版本控制

ALTER PROCEDURE [dbo].[CustomerDelete]
(@CustomerId int, @Version int)
AS
DELETE FROM [Customer] WHERE [CustomerId] = @CustomerId AND [Version] = @Version
RETURN @@Error

步驟 6:映射參數同步

修改映射文件增加第二個參數:

<sql-delete>exec CustomerDelete ?,?</sql-delete>

步驟 7:最終驗證

測試通過,生成 SQL 與原生完全一致:

exec CustomerDelete @p0,@p1; @p0 = '8', @p1 = '1'

內嵌 SQL 替代方案

<sql-delete>DELETE FROM [Customer] WHERE [CustomerId] = ? AND [Version] =?</sql-delete>

結語

本文完成 MyGeneration 生成存儲過程與刪除操作整合。下篇將繼續講解新增、更新、查詢操作的存儲過程應用細節。

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