預存程序:
CREATE PROCEDURE scalarSProcs @number int AS
SELECT @number as value, 'YJingLee' as name
映射:
<sql-query name="ScalarSProcs">
<return-scalar column="value" type="int"/>
<return-scalar column="name" type="string"/>
exec scalarSProcs :number
</sql-query>
呼叫:session.GetNamedQuery("ScalarSProcs").SetInt32("number", 22).List() → 回傳 object[] { 22, "YJingLee" }。
exec paramSProcs ?, ? → .SetInt64(0, 10L).SetInt64(1, 20L)exec paramSProcs ?, :second → .SetInt64(0, 10L).SetInt64("second", 20L)預存程序查詢 Customer 實體:
<sql-query name="EntitySProcs">
<return class="DomainModel.Entities.Customer,DomainModel"/>
exec entitySProcs :customerId
</sql-query>
注意:原文嘗試用 <return-property> 映射欄位但在作者機器失敗,簡化為僅 <return class=.../> 即可工作(需欄位名與屬性名一致)。
呼叫:session.GetNamedQuery("EntitySProcs").SetInt32("customerId", 1).UniqueResult<Customer>()。
只需特定欄位時,用標量方式:
<sql-query name="SingleEntitySProcs">
<return-scalar column="Firstname" type="string"/>
exec singleEntitySProcs
</sql-query>
SetFirstResult/SetMaxResults 分頁SET NOCOUNT ON 可能提升效能<loader query-ref="EntitySProcs"/> 自訂載入邏輯