天天看點

[NHibernate]存儲過程的使用(二)

<a href="http://www.cnblogs.com/wolf-sun/p/4088288.html#t1" target="_blank">寫在前面</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4088288.html#t2" target="_blank">文檔與系列文章</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4088288.html#t3" target="_blank">建立對象</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4088288.html#t4" target="_blank">更新對象</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4088288.html#t5" target="_blank">總結</a>

上篇文章介紹了如何使用mygeneration代碼生成器生成存儲過程,以及nhibernate中通過存儲過程删除資料的内容,這篇文章将介紹如何建立對象,更新對象。

<a href="http://www.cnblogs.com/wolf-sun/p/3694592.html">[nhibernate]體系結構</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3694901.html">[nhibernate]isessionfactory配置</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3704012.html">[nhibernate]持久化類(persistent classes)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3705229.html">[nhibernate]o/r mapping基礎</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3720259.html">[nhibernate]關聯映射</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3721528.html">[nhibernate]parent/child</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3724052.html">[nhibernate]緩存(nhibernate.caches)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3734249.html">[nhibernate]nhibernate.tool.hbm2net</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3734313.html">[nhibernate]nullables</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3956802.html">[nhibernate]nhibernate如何映射sqlserver中image字段</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4046672.html">[nhibernate]條件查詢criteria query</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4048048.html">[nhibernate]增删改操作</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4049716.html">[nhibernate]事務</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4050714.html">[nhibernate]并發控制</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4067026.html">[nhibernate]元件之依賴對象</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4068749.html">[nhibernate]一對多關系(級聯删除,級聯添加)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4070935.html">[nhibernate]一對多關系(關聯查詢)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4074654.html">[nhibernate]多對多關系(關聯查詢)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4077226.html">[nhibernate]延遲加載</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082432.html">[nhibernate]立即加載</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html">[nhibernate]視圖處理</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4083402.html">[nhibernate]n+1 select查詢問題分析</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4085314.html">[nhibernate]存儲過程的使用(一)</a>

建立對象和删除對象的步驟類似,首先修改customer.hbm.xml映射檔案,添加&lt;sql-insert&gt;節點。調用tb_customerinsert存儲過程,customerinsert 存儲過程有四個參數,這裡用四個問号表示:

測試

[NHibernate]存儲過程的使用(二)
[NHibernate]存儲過程的使用(二)

運作代碼,進行測試,此時會有一個異常

[NHibernate]存儲過程的使用(二)

int和guid類型不相容,猜測是存儲過程中參數位置不對,調整參數位置。

[NHibernate]存儲過程的使用(二)
[NHibernate]存儲過程的使用(二)

資料表

[NHibernate]存儲過程的使用(二)

你會發現,在存儲過程中的,參數的順序id必須在後面,樂觀并發控制(版本号)必須在第一個。

首先修改映射檔案customer.hbm.xml,添加&lt;sql-update&gt;節點。同理,參數使用?占位。

[NHibernate]存儲過程的使用(二)
[NHibernate]存儲過程的使用(二)

此時還會有那個異常,如圖,同樣的辦法修改存儲過程。

[NHibernate]存儲過程的使用(二)

修改後的存儲過程

[NHibernate]存儲過程的使用(二)
[NHibernate]存儲過程的使用(二)

生成的sql語句

[NHibernate]存儲過程的使用(二)

你通過資料表中的version,會發現,它發生了變化,從1到2(出現3的原因,是在之前我測試了一下)。并且在sql語句中有一個@p4的參數。

為了更好的實作版本控制的功能,你可以修改存儲過程,添加一個@oldeversion參數。

[NHibernate]存儲過程的使用(二)
[NHibernate]存儲過程的使用(二)

在映射檔案中,添加一個?,代表@oldversion。

生成的sql語句為

[NHibernate]存儲過程的使用(二)

這樣就跟存儲過程中的參數對應上了。

上篇文章也介紹了一種方法,如果你不想執行存儲過程,可以使用sql語句也可以達到目的。

本篇文章介紹了如何在nhibernate使用存儲過程添加資料,更新資料及在使用過程中需要注意的問題。你可能也有個疑問,為啥使用mygeneration生成的存儲過程,每次都要修改?這個的确是個很讓人惱火的地方,沒辦法,并不能什麼東西都十全十美,至少存儲過程的文法已經寫好了,修改起來也很友善。

部落格位址:

<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>

部落格版權:

本文以學習、研究和分享為主,歡迎轉載,但必須在文章頁面明顯位置給出原文連接配接。

如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起讨論,共同進步!

再次感謝您耐心的讀完本篇文章。

轉載:http://www.cnblogs.com/wolf-sun/p/4088288.html