首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Nhibernate + Criteria + Firebird从数据库中只返回一条记录?

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

Stack Overflow用户
提问于 2012-03-07 04:09:32
回答 1查看 11.3K关注 0票数 2

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

代码语言:javascript
复制
var criteria = session.CreateCriteria(typeof(T))
    .SetFirstResult(0)
    .SetMaxResults(1)
    .Add(getRestricao(rest))
    .UniqueResult<T>();

tx.Commit();

return criteria;

但不起作用!错误是:

代码语言:javascript
复制
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

如何从条件中的Firebird生成"SELECT FIRST 1“?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-07 15:43:57

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

如果手动运行SQL,是否会得到多条记录?

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

然后从你的方法调用中返回第一项。

代码语言:javascript
复制
return criteria.FirstOrDefault();

只要您保留最大记录,那么应该只返回第一行(或null)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9591067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档