2012-04-10 160 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