2013-04-05 2 views
0

я получаю исключение:Nhibernate Найдено: целое число, ожидаемое INT

NHibernate.HibernateException: Wrong column type in main_Command for column Id. 
Found: integer, Expected INT 

отображения является:

<id name="Id" type="int"> 
    <generator class="identity" /> 
</id> 

И свойство класса:

public virtual int Id { get; set; } 
+0

Вы пытались удалить 'тип = "ИНТ"» из ваше сопоставление? Также, какие СУБД вы используете? – mickfold

+0

Я добавил type = "int", пытающийся исправить программу, но все еще имеет исключение – user1669713

+0

Я использую SQLite – user1669713

ответ

1

Я думаю, что ваш типа (но я мог ошибаться), согласно статье this, взята из NHibernate in Action из Manning Publications.

.NET типы примитив отображение

Mapping Type .NET Type  System.Data.DbType 
    Int16  System.Int16 DbType.Int16 
    Int32  System.Int32 DbType.Int32 
    Int64  System.Int64 DbType.Int64 

Попробуйте использовать type='Int32' или полностью удалить его

+0

Я тоже пробовал оба метода. – user1669713

+0

На самом деле это не ответ, но вместо естественного и идентичного, наконец, я использовал приращение, и это работает для меня. – user1669713

+0

А я вижу ваш комментарий к SQLLITE. Я не думаю, что автоматическое увеличение - это такая вещь. Я на 100% уверен, что родной должен работать. см. http://stackoverflow.com/questions/1512446/nhibernate-sqlite-mappings – Rippo

2

Проверка источника NHibernate для SQLite Dialect и поиска ответа на вопрос similar. Похоже, что все подписанные целочисленные типы не сопоставляются с INTEGER, как это требуется для столбца SQLite Auto Increment.

RegisterColumnType(DbType.Int16, "SMALLINT"); 
RegisterColumnType(DbType.Int32, "INT"); 
RegisterColumnType(DbType.Int64, "BIGINT"); 

Но хорошая новость заключается в том, что без знака Интс сделать карту для INTEGER.

RegisterColumnType(DbType.UInt16, "INTEGER"); 
RegisterColumnType(DbType.UInt32, "INTEGER"); 
RegisterColumnType(DbType.UInt64, "INTEGER"); 

Поэтому, пожалуйста, попробуйте следующее отображение:

<id name="Id" type="UInt32"> 
    <generator class="identity" /> 
</id> 

С соответствующим изменением к вам класса:

public virtual UInt32 Id { get; set; } 
Смежные вопросы