NHibernate личность родной sql против критериев в MySql - PullRequest
0 голосов
/ 11 января 2012

У меня есть настройка pk таблицы MySql, как показано ниже:

`id` int(10) unsigned NOT NULL auto_increment

Мой файл User.hbm.xml для идентификатора выглядит следующим образом:

<id name="Id" type="int" column="id" unsaved-value="null">
    <generator class="identity" />
</id>

Свойство id моего класса User похоже на C #:

public virtual int Id { get; private set; }

Вот что произошло:

  1. Если я использую следующее, это работает:

    var user = Session.Get< User >(1);
    
  2. Но, если я изменю его на собственный SQL, появится сообщение об ошибке: «Тип System.UInt32 не может быть назначен свойству типа System.Int32 установщика DataAccess.Domain.User.Id».

    var user = Session
                  .CreateSQLQuery(@"SELECT id AS Id, login_name AS LoginName, first_name AS FirstName, last_name AS LastName FROM user WHERE id = :id")
                  .SetResultTransformer(Transformers
                            .AliasToBean<User>())
                  .SetInt32("id", 1)
                  .UniqueResult<User>();
    

Я очень растерялся, и какой совет? Это имеет смысл для UInt32, потому что в таблице MySql написано unsigned. Поэтому я изменил его на uint в моем файле классов и сопоставлений. Затем собственный SQL работает, как и ожидалось, но Session.Get<User>(1) завершился ошибкой:

Provided id of the wrong type. Expected: System.UInt32, got System.Int32".

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...