我得到一个例外:
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 :(得分: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'
或完全删除