我想在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查询节点中有配置错误,但在网上搜索很长时间却找不到。
请帮助或尝试提供一些如何实现这一目标的想法。也许有一些有用的参考例子,有些人可以提供链接。