发现Nhibernate:整数,预期INT

时间:2013-04-05 11:06:27

标签: c# nhibernate orm mapping

我得到一个例外:

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; }

2 个答案:

答案 0 :(得分:2)

检查SQLite Dialect的NHibernate来源并找到similar问题的答案。看起来所有有符号整数类型都不会映射到SQLite Auto Increment列所需的INTEGER

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; }

答案 1 :(得分:1)

我认为你的类型是错的(但我可能是错的),根据this文章摘自Manning Publications的NHibernate in Action。

.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'或完全删除