【问题标题】:nHibernate stored procedure callnHibernate 存储过程调用
【发布时间】:2012-04-10 04:50:10
【问题描述】:

我对 nHibernate ORM 很陌生。有人可以帮我理解/解决我下面的场景吗?

我有一个名为getSummaryReport 的存储过程,它需要@productID 作为参数。此存储过程连接多个表并给出汇总数据。

我需要使用 nhibernate 加载从上述存储过程返回的数据。有人可以帮助我如何通过 nHibernate 调用存储过程吗?

我现在脑海中闪过的一些问题是:

  1. 我需要映射 xml 吗?如果是的话,据我所知,映射 xml 应该有每个属性的物理表。在上述情况下,存储过程正在生成全新的对象。

  2. 如何在 C# 中调用上述存储过程?

再次感谢您。

【问题讨论】:

    标签: c# nhibernate stored-procedures


    【解决方案1】:

    试试这个,你的映射:-

    <?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>();
    

    你的班级是:-

    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 敏感的。

    【讨论】:

    • 谢谢@Rippo,nHibernate 映射是否必须有一个唯一的 ID?你的类也必须有 XML 映射吗?
    • 另外,对于nHibernate,所有的XML *.nbh.xml 都必须有对应的物理表吗?
    • 如果 YOURCLASS 有 unqiue Id 会更好,但您不需要对应 XML 文件的映射表。我的回答中上面的 XML 文件可以称为 namedqueires.hbm.xml
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    相关资源
    最近更新 更多