2013-04-05 42 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; }