2010-05-06 4 views
0

Я немного ленив в NHibernate и использую Session.CreateSqlQuery (...) вместо того, чтобы делать все это с помощью Lambda's. Во всяком случае, какая структура меня заключается в том, что, похоже, проблема заключается в преобразовании некоторых типов, возвращаемых из (в данном случае MySQL) DB в собственные .Net tyes.NHibernate Преобразование данных CreateSQLQuery из бит в boolean error

Запрос на вопрос выглядит следующим образом ....

 IList<Client> allocatableClients = 
        Session.CreateSQLQuery(
         "select clients.id as Id, clients.name as Name, clients.customercode as CustomerCode, clients.superclient as SuperClient, clients.clienttypeid as ClientType " + 
... 
... 
.SetResultTransformer(new NHibernate.Transform.AliasToBeanResultTransformer(typeof(Client))).List<Client>(); 

Тип в базе данных SuperClient немного (1) и в клиенте объект типа является BOOL.

получил Ошибка:

System.ArgumentException: Object of type 'System.UInt64' cannot be converted to type 'System.Boolean'. 

Это кажется странным, что это преобразование не может быть завершена.

Было бы полезно для любых идей.

Спасибо.

ответ

0

Не нужно делать никаких лямбдов (даже если они забавные!). Если Client является отображенным классом, то вы можете использовать основной метод NHibernate CreateCriteria<>. Это очень просто:

session 
    .CreateCriteria<Client>() 
    .List<Client>(); 

Если Client не разводится, то я бы создать свойство SuperUser_Long и обернуть его SuperUser

+0

Мой плохо! Я должен был включить остальную часть моего запроса, в которой есть некоторые пункты, которые я хотел бы избежать «лямбда-ин». – Remotec

+0

Нет необходимости в lambdas в предложении where: - используйте '.Add()' в 'CreateCriteria', чтобы добавить' SimpleExpression' или 'Restriction' –

Смежные вопросы