使用Nhibernate调用存储过程 - 获取异常无持久性:

时间:2010-04-21 14:25:58

标签: c# asp.net nhibernate stored-procedures fluent-nhibernate

这是代码,我如何调用存储过程

ISession session = NHibernateHelper.GetCurrentSession();
        IQuery q = session.GetNamedQuery("ps_getProgressBarData1");
        var t = q.List();

XML映射

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"   namespace="ReleaseDAL"  assembly="ReleaseDAL">

 <sql-query name="ps_getProgressBarData1">
    <return alias="ProgressBar" class="ProgressBar">
      <return-property name="Tot" column="Tot"/>
      <return-property name="subtot" column="subtot"/>
    </return>
    exec ps_getProgressBarData1
  </sql-query>
</hibernate-mapping>

类映射

public virtual Int32 Tot {get { return _Tot; } set { _Tot = value; } }
    public virtual Int32 subtot { get { return _subtot; } set { _subtot = value; }}

我得到例外:No persister for: ReleaseDAL.ProgressBar, ReleaseDAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

请告诉我这里的问题是什么?

由于

2 个答案:

答案 0 :(得分:2)

如果您没有将映射文件标记为embedded resource,则可能会收到该错误。请先检查一下。

答案 1 :(得分:0)

你没有ProgressBar的映射(它不是我想的实体),所以你可能只想从查询中得到一个DTO。

因此,您只需将结果映射为标量,并在查询中定义变换器。

 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="ReleaseDAL"  assembly="ReleaseDAL">

 <sql-query name="ps_getProgressBarData1">
      <return-scalar column="Tot" Type="xxx"/>
      <return-scalar column="subtot" Type="xxx"/>

    exec ps_getProgressBarData1
  </sql-query>
</hibernate-mapping>

并在查询方法中:

query.SetResultTransformer(Transformers.AliasToBean(typeof(ProgressBar )));
query.List()