Как вернуть только одну запись из базы данных, используя Nhibernate + Criteria + Firebird? - PullRequest
2 голосов
/ 07 марта 2012

Я использую Nhibernate 3.2, Firebird Net Provider 2.7 и Критерии.после googled к тому, как вернуть только одну запись в базе данных, я пришел к этому ...

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

Как сгенерировать «SELECT FIRST 1» из Firebird in Criteria?Спасибо!

1 Ответ

1 голос
/ 07 марта 2012

.UniqueResult должен возвращать только 1 запись, если возвращается ноль или более одной записи, выдается ошибка.

Если вы запускаете SQL вручную, вы получаете более одной записи?

Вы пытались изменить .UniqueResult<T>() на .List<T>()

И затем возвращение первого элемента из вашего вызова метода.

return criteria.FirstOrDefault();

Пока вы храните свои максимальные записи, первая строка должна быть возвращена (или нулевая)

...