NHibernate GetNameQuery调用Mysql存储过程

时间:2017-11-20 01:57:40

标签: c# mysql nhibernate

我想在Nhibernate4中使用方法GetNameQuery Method来调用mysql存储过程。但我收到此错误消息:

  

在mysql中的NHibernate会话GetNameQuery
  NHibernate.Exceptions.GenericADOException:无法执行查询
  [CALL InputPramWithNameAndReturnScalar(?p0,0); ]
  名称:number1 - 值:10
  [SQL:CALL InputPramWithNameAndReturnScalar(?p0,0);] ---> MySql.Data.MySqlClient.MySqlException:用于例程test.InputPramWithNameAndReturnScalar的OUT或INOUT参数2不是BEFORE触发器中的变量或NEW伪变量

存储过程称为InputPramWithNameAndReturnScalar,并在参数中取一个并返回一个out参数。它的定义如下:

DELIMITER //
create procedure InputPramWithNameAndReturnScalar
(in number1 int, out square int)
BEGIN
    #select number1+1 into square;
    set square =number1*number1;
END;
//
DELIMITER

它称为使用session.GetNameQuery方法:

hbm.xml:

<?xml version="1.0"  encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MVCNhibernate.Domain" namespace="MVCNhibernate.Domain.Entities">
      <class name="MVCNhibernate.Domain.Entities.Student, MVCNhibernate.Domain" table="Student">
        <id name="StudentId" column="StudentId" type="string"  >
        </id>
        <property name="Name" column="name" type="string"  />
        <property name="Age" column="age" type="int"  />
      </class>
    <sql-query name="InputPramWithNameAndReturnScalar">
      <return-scalar column="sum" type="int"/>    
      CALL InputPramWithNameAndReturnScalar(:number1,0);
    </sql-query>
    </hibernate-mapping>

代码:

IQuery query = session.GetNamedQuery("InputPramWithNameAndReturnScalar");
return query.SetInt32("number1", 10).List();    

站点中没有参考示例:http://nhibernate.info/。我认为它在SQL查询节点中有配置错误,但在网上搜索很长时间却找不到。

请帮助或尝试提供一些如何实现这一目标的想法。也许有一些有用的参考例子,有些人可以提供链接。

0 个答案:

没有答案