У меня есть настройка 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; }
Вот что произошло:
Если я использую следующее, это работает:
var user = Session.Get< User >(1);
Но, если я изменю его на собственный 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".
Спасибо