如何使用Nhibernate + Criteria + Firebird从数据库中只返回一条记录?

时间:2012-03-06 20:09:32

标签: nhibernate criteria firebird

我正在使用Nhibernate 3.2,Firebird Net Provider 2.7和Criteria。谷歌搜索到如何只返回数据库中的一条记录后,我来到这里......

var criteria = session.CreateCriteria(typeof(T))
    .SetFirstResult(0)
    .SetMaxResults(1)
    .Add(getRestricao(rest))
    .UniqueResult<T>();

tx.Commit();

return criteria;

但不行!错误是:

NHibernate.Exceptions.GenericADOException : could not execute query
[ /* criteria query */ SELECT this_.idPermissao as idPermis1_21_0_, this_.nomePermissao as nomePerm2_21_0_, this_.permissao as permissao21_0_ FROM Permissao this_ WHERE this_.nomePermissao = ? ]
Name:cp0 - Value:Administrador
[SQL: /* criteria query */ SELECT this_.idPermissao as idPermis1_21_0_, this_.nomePermissao as nomePerm2_21_0_, this_.permissao as permissao21_0_ FROM Permissao this_ WHERE this_.nomePermissao = ?]
----> System.ArgumentException : index should be greater than or equal to 0
Parameter name: index

如何在Criteria中从Firebird生成“SELECT FIRST 1”?谢谢!

1 个答案:

答案 0 :(得分:1)

.UniqueResult应该只返回1条记录,如果为0,或者返回多条记录,则会抛出错误。

如果您手动运行SQL,您会获得多条记录吗?

您是否尝试将.UniqueResult<T>()更改为.List<T>()

然后从方法调用中返回第一个项目。

return criteria.FirstOrDefault();

只要你保留你的最大记录,那么第一行应该只返回(或为空)