我无法让此存储过程调用工作。我一直得到一个"附加信息:参数UserName不作为[LockUser]"中的命名参数存在。消息
using (var session = sm.OpenSession())
{
var query = session.CreateSQLQuery("LockUser")
.SetString("UserName", User.UserName.ToString());
}
映射
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Models.Mappings" assembly="Intranet">
<sql-query name="LockUser">
<property name="UserName"/>
exec LockUser :UserName
</sql-query>
有人能指出我正确的方向吗?
答案 0 :(得分:2)
您正在混合两个功能。
小引用片段:
<sql-query name="persons">
<return alias="person" class="eg.Person"/>
SELECT person.NAME AS {person.Name},
person.AGE AS {person.Age},
person.SEX AS {person.Sex}
FROM PERSON person
WHERE person.NAME LIKE :namePattern
</sql-query>
用法:
IList people = sess.GetNamedQuery("persons")
.SetString("namePattern", namePattern)
.SetMaxResults(50)
.List();
因为我们可以看到必须调用 GetNamedQuery()
或者您可以使用
小引用片段:
sess.CreateSQLQuery("SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS")
.AddEntity(typeof(Cat));
摘要:对于命名查询,我们必须使用.GetNamedQuery()
。我们也可以使用.CreateSQLQuery()
自己构建SQL。另请查看此示例:Nhibernate CreateSQLQuery Stored Procedure result to non mapped class