2012-03-06 34 views
2

我使用Nhibernate 3.2,Firebird Net Provider 2.7和Criteria。在谷歌搜索後如何返回只有一個記錄在數據庫我來到這...如何使用Nhibernate + Criteria + Firebird僅從數據庫返回一條記錄?

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 

如何從標準的火鳥生成「選擇第一個1」?謝謝!

回答

1

.UniqueResult應該只返回1條記錄,如果爲零,或者返回多條記錄,則會拋出錯誤。

如果你手動運行SQL你會得到多個記錄嗎?

你嘗試改變.UniqueResult<T>().List<T>()

,然後從方法調用返回的第一個項目。

return criteria.FirstOrDefault(); 

只要你保持你的最大記錄,然後在第一行只應退還(或空)

+2

是否存在零條記錄,則返回null,不拋出異常。糾正我,如果我錯了,但它不只是拋出一個''NonUniqueResultException''如果有多個結果?請參閱:[AbstractQueryImpl行959](https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Impl/AbstractQueryImpl.cs#L959)。 – annemartijn 2014-04-14 11:45:58

相關問題