二进制字段和命名查询的问题 - nHibernate

时间:2012-08-02 11:07:28

标签: nhibernate

我正在使用nHibernate尝试使用命名查询来记录用户,但是他们的密码是经过哈希处理的,因此存储为MS SQL DB中的二进制字段。但是我无法使用登录代码。它抛出一个错误:

using (var session = sessionFactory.OpenSession())
{
  user = (CreamUser)session.GetNamedQuery("loginuser")
         .SetString("UserName", userName)
         .SetBinary("Password", hashedPassword).UniqueResult();

}

<sql-query name="loginuser">
    <query-param name="UserName" type="string" />
    <query-param name="Password" type="binary" />
    <return alias="User" class="components.User"/>
    <![CDATA[
    SELECT * FROM users 
    WHERE username=:UserName AND 
    password=:Password 
    ]]>
</sql-query>

我已经尝试了我能想到的一切,但无法让它发挥作用。

1 个答案:

答案 0 :(得分:0)

好的,所以我把它解决了。事实证明,这与我正在执行的查询缺少一些与我返回的类型(用户)相匹配的字段这一事实有关。

如果其他人遇到此问题,则会出现错误:

无法执行查询\ r \ n [SELECT * FROM users \ n WHERE username = @ p0 AND \ n
password = @ p1] \ r \ n名称:UserName - 值:admin名称:密码 - 值:System.Byte [] \ r \ n [SQL: SELECT * FROM users \ n WHERE username = @ p0 AND \ n password = @ p1]

感谢让我更深入地了解ExpectoPatronum