我对nHibernate ORM很新。有人可以帮我理解/解决我下面的情景吗?
我有一个名为getSummaryReport
的存储过程,它希望@productID
作为参数。此存储过程连接多个表并提供摘要数据。
我需要使用nhibernate加载从上面的存储过程返回的数据。有人可以帮助我通过nHibernate调用存储过程的方式吗?
现在我头脑中的一些问题是:
我需要映射xml吗?如果是的话,映射xml会发生什么,据我所知,每个属性应该有物理表。在上面的案例中,存储过程正在生成全新的对象。
如何在C#中调用上述存储过程?
再次感谢你。
答案 0 :(得分: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..
}
确保在YOURCLASS
中定义了从您的SP返回的内容,并记住您的列名和属性名称必须与CASE
敏感的内容完全匹配。