2012-04-10 161 views
3

我對nHibernate ORM相當陌生。有人能幫我理解/解決我下面的情況嗎?nHibernate存儲過程調用

我有一個名爲getSummaryReport的存儲過程,它需要@productID作爲參數。該存儲過程會連接多個表並提供摘要數據。

我需要加載使用nhibernate從上述存儲過程返回的數據。有人可以幫助我怎麼可以通過nHibernate調用存儲過程嗎?

一些通過我的頭現在正在運行的問題是:

  1. 我需要一個XML映射?如果是的話,根據我的理解,映射xml應該有每個屬性的物理表。在上述情況下,存儲過程正在生成全新的對象。

  2. 如何從C#中調用上述存儲過程?

再次感謝您。

回答

5

試試這個,你的映射: -

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <sql-query name="SummaryReport"> 
    exec getSummaryReport :productId 
    </sql-query> 
</hibernate-mapping> 

然後用SetResultTransformer ...

var results = Session 
     .GetNamedQuery("SummaryReport") 
     .SetInt32("productId", productId); 
     .SetResultTransformer(new AliasToBeanResultTransformer(typeof(YOURCLASS))); 
return results.List<YOURCLASS>(); 

和YOURCLASS是: -

public class YOURCLASS 
{ 
    public virtual int ProductId { get; set; } 
    public virtual string Column1Returned { get; set; } 
    public virtual int Column2Returned { get; set; } 
      etc.. 
} 

請返回肯定什麼都從你的SP中定義YOURCLASS記住你的列名和屬性名必須匹配正如他們對CASE敏感。

+0

謝謝@Rippo,nHibernate映射必須有一個唯一的ID嗎? YOURCLASS也必須具有XML映射嗎? – 2012-04-10 09:10:57

+0

另外,在nHibernate中,所有的XML * .nbh.xml都必須有相應的物理表嗎? – 2012-04-10 09:15:50

+0

如果YOURCLASS具有unqiue標識,但不需要爲相應的XML文件創建映射表,則更好。上面的XML文件在我的答案中可能只是被稱爲namedqueires.hbm.xml – Rippo 2012-04-10 11:52:35