2013-04-05 40 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

你试图删除从'TYPE = “INT””你的映射?你还使用了哪些DBMS? – mickfold 2013-04-05 11:09:47

+0

我已经添加了尝试修复程序的type =“int”,但仍然有一个例外 – user1669713 2013-04-05 11:11:50

+0

我正在使用SQLite – user1669713 2013-04-05 11:12:16

回答

1

我想你的类型根据this文章摘自Manning出版社的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'或删除它完全

+0

我也试过这两种方法。 – user1669713 2013-04-05 12:35:38

+0

实际上并不是一个答案,但是最终,我使用增量而不是本机和身份,它适用于我。 – user1669713 2013-04-05 12:38:16

+0

啊我看到你对SQLLITE的评论。我不认为自动增量是这样的事情。我100%肯定本土应该工作。请参阅http://stackoverflow.com/questions/1512446/nhibernate-sqlite-mappings – Rippo 2013-04-05 13:53:46

2

检查的SQLite Dialect NHibernate的源和找到答案到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; }