NHibernate 儲存過程的使用(三)

2022-02-07 06:48:40 字數 3766 閱讀 8581

寫在前面

文件與系列文章

查詢總結

前面的文章介紹了在nhibernate中使用儲存過程進行增刪改的操作,當然查詢也是可以的,在nhibernate中也可以執行任意的儲存過程。本篇文章將介紹如何使用查詢的儲存過程的方式。

[nhibernate]體系結構

[nhibernate]isessionfactory配置

[nhibernate]持久化類(persistent classes)

[nhibernate]集合類(collections)對映

[nhibernate]關聯對映

[nhibernate]parent/child

[nhibernate]快取(nhibernate.caches)

[nhibernate]nhibernate.tool.hbm2net

[nhibernate]nullables

[nhibernate]nhibernate如何對映sqlserver中image欄位

[nhibernate]基本配置與測試

[nhibernate]hql查詢

[nhibernate]條件查詢criteria query

[nhibernate]增刪改操作

[nhibernate]事務

[nhibernate]併發控制

[nhibernate]元件之依賴物件

[nhibernate]一對多關係(級聯刪除,級聯新增)

[nhibernate]一對多關係(關聯查詢)

[nhibernate]多對多關係(關聯查詢)

[nhibernate]延遲載入

[nhibernate]立即載入

[nhibernate]檢視處理

[nhibernate]n+1 select查詢問題分析

[nhibernate]儲存過程的使用(一)

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

使用節點根據使用者id進行查詢

新增儲存過程

create

proc

[dbo

].[ps_search

]@customerid

uniqueidentifier

asbegin

select

*from

tb_customer

where customerid=

@customerid

end

在對映檔案中使用並定義查詢的名稱

1

2<

sql-query

name

="ps_search"

>

3<

return

class

="wolfy.shop.domain.entities.customer,wolfy.shop.domain"

/>

4exec ps_search :customerid

5sql-query

>

測試在資料訪問層中,使用isession介面提供的getnamedquery方法來呼叫帶命名的儲存過程,並傳遞乙個整形引數。**如下:

1

///2

///使用儲存過程,進行查詢

3///

4///

5public ilistsearchcustomerbyidusingproc(guid customerid)

6

結果

生成的sql語句

1

exec sp_executesql n'

exec ps_search @p0

',n'

@p0 uniqueidentifier

',@p0='

ddf63750-3307-461b-b96a-7ff356540cb8

'

如果就想返回乙個實體的一部分屬性怎麼辦?

修改儲存過程,只選擇需要的字段

1

alter

proc

[dbo

].[ps_search]2

@customerid

uniqueidentifier3as

4begin

5select customername from

tb_customer

6where customerid=

@customerid

7end

修改對映檔案

<

sql-query

name

="ps_search"

>

<

return-scalar

column

="customername"

type

="string"

/>

exec ps_search :customerid

sql-query

>

修改方法

1

///2

///使用儲存過程,進行查詢

3///

4///

5public

string

searchcustomernameusingproc(guid customerid)

6

結果

因為執行的是儲存過程,sql語句與上面相同(在原來的儲存過程基礎上修改的)。

最常見的bug

遇到這樣的異常,可以忽視它,我找了很久也沒找到解決方案,然後就直接.list()將結果返回了。雖然得到結果了總有那麼點不太滿意(完美主義者)。

這篇文章介紹了nhibernate中如何使用查詢儲存過程的方法及需注意的地方,比如對映檔案中節點需和同級別才行。到這裡nhibernate中使用儲存過程增刪改查就算結束了,說個題外話,使用orm為了少寫sql,所以在實際專案中使用nhibernate的儲存過程比較少見。就算用也沒有直接在對映檔案中新增的方式。因為你知道,不一定別人就知道,所以造成一定的維護難度,不過知道這種高大上的寫法,遇到的時候知道咋回事就ok了。

參考文章:

NHibernate執行儲存過程

既然要學習nhibernate,那知道如何執行儲存過程自然是必不可少的,網上有很多資料是用新建對映檔案的方式在nhibernate中執行儲存過程,我個人覺得這真的不太好,反覆琢磨後搞出了下面的這種方式,希望對大家有幫助。create procedure dbo proc addsysdict id ...

NHibernate 執行儲存過程

前置條件 已經獲取了isession型別的物件 this.session 已經建立乙個儲存過程 proc name,該儲存過程有兩個引數 para1 varchar 型別,傳入引數 para2 number型別,傳出引數 int result 0 idbcommand cmd this.sessio...

Nhibernate 儲存過程獲取返回值

1 region executestoredprocforquery 2public void excutestoreprocforreturn string spname,ilistparam,out object result 319 cmd.parameters.add parameter 2...