寫在前面
文件與系列文章
查詢總結
前面的文章介紹了在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測試在資料訪問層中,使用isession介面提供的getnamedquery方法來呼叫帶命名的儲存過程,並傳遞乙個整形引數。**如下:2<
sql-query
name
="ps_search"
>
3<
return
class
="wolfy.shop.domain.entities.customer,wolfy.shop.domain"
/>
4exec ps_search :customerid
5sql-query
>
1結果 生成的sql語句///2
///使用儲存過程,進行查詢
3///
4///
5public ilistsearchcustomerbyidusingproc(guid customerid)
6
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...