0

我得到一个例外:

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

2 回答 2

2

检查SQLite 方言的 NHibernate 源并找到类似问题的答案。看起来所有有符号整数类型都没有按照SQLite Auto IncrementINTEGER的要求映射。

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; }
于 2013-04-05T12:40:27.883 回答
1

我认为你的类型是错误的(但我可能是错的),根据这篇文章取自 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'完全使用或删除它

于 2013-04-05T12:28:58.277 回答