2011-01-07 40 views
2

通常我們爲每個表類創建1:1映射。如何使用從多個表返回結果的NHibernate調用過程?

實施例(表):
[用戶]
USER_ID - PK
名稱

[交易]
USER_ID - FK
ITEM_ID


實施例的映射:
public class User
{
public string ID {get;設置;}
public string Name {get;設置;}
}

公共類交易
{
公共字符串用戶名{獲得;設置;}
public string ItemID {get;設置;}
公共小數金額{get;設置;}
}

但是,由於優化的關注,有時需要做的操作,而查詢結果;我們通常使用從多個表返回結果的存儲過程。 如果我們使用上面的例子,我們如何調用返回連接表結果的過程?爲了這個組合記錄的緣故,是否可以不創建新的類和綁定?

謝謝!

回答

3

有可能在這種情況下,以使用存儲的過程,使用映射構建如下所示:

<sql-query name="LoadUsersAndTransactions" xml:space="preserve"> 
    <return class="User" alias="u"> 
    <return-property name="ID" column="user_id" /> 
    <return-property name="Name" column="name" /> 
    </return> 
    <return-join property="u.Transactions" alias="t"> 
    <return-property name="key" column="user_id" /> 
    <return-property name="element" column="item_id" /> 
    <return-property name="element.id" column="item_id" /> 
    <return-property name="element.Amount" column="amount" /> 
    </return-join> 
    EXEC dbo.SelectUsersAndTransactions :param_1, ..., :param_N 
</sql-query> 

本示例假定交易被映射爲對用戶類的袋子。

IList<User> users = session 
    .GetNamedQuery("LoadUsersAndTransactions") 
    .SetString("param_1", parameterValue1) 
    ... 
    .SetString("param_N", parameterValueN) 
    .List<User>(); 

自定義的SQL查詢使用NHibernate的文檔here:你會從C#按如下方式使用此查詢。

乾杯, Gerke。

+0

還可以找到更復雜的自定義SQL映射的更多示例更多複雜自定義SQL映射的示例可以在http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/trunk/nhibernate/src/上找到NHibernate.Test/NHSpecificTest/NH1612/Mappings.hbm.xml?revision = 3974 – 2011-01-09 08:32:31

相關問題