2011-02-28 72 views
0

此代碼生成一個「算術溢出錯誤轉換數字數據類型數字功能NHibernate導致「算術溢出錯誤轉換數字數據類型數值」上插入/保存

Session.Save(new Keyword 
{ 
    Approved = true, 
    Custom = false, 
    Value = "toto", 
    Language = "en" 
}); 

的關鍵字的映射是以下

public class KeywordMap : ClassMap<Keyword> 
{ 
    public KeywordMap() 
    { 
     Table("PRODUCTS_Keywords"); 

     Id(x => x.Id, "keywordID").GeneratedBy.Identity(); 

     Map(x => x.Value, "keyword") 
      .Not.Nullable(); 

     Map(x => x.Language, "language") 
      .Not.Nullable(); 

     Map(x => x.Approved, "approved") 
      .Not.Nullable(); 

     Map(x => x.Custom, "custom") 
      .Not.Nullable(); 
    } 
} 

關鍵字的實體是在F ollowing

public class Keyword 
{ 
    public virtual Int64 Id { get; private set; } 
    public virtual string Value { get; set; } 
    public virtual string Language { get; set; } 
    public virtual bool Approved { get; set; } 
    public virtual bool Custom { get; set; } 
} 

這是表PRODUCTS_Keyword的表現在我的數據庫(我使用MSSQL 2008 R2)

CREATE TABLE [dbo].[PRODUCTS_Keywords](
    [keywordID] [bigint] IDENTITY(1,1) NOT NULL, 
    [keyword] [nvarchar](50) NOT NULL, 
    [language] [char](2) NOT NULL, 
    [approved] [bit] NOT NULL, 
    [custom] [bit] NOT NULL, 
PRIMARY KEY CLUSTERED 

這是關鍵字

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true"> 
    <class xmlns="urn:nhibernate-mapping-2.2" name="Keyword, Main, Version=1.4.0.0, Culture=neutral, PublicKeyToken=null" table="PRODUCTS_Keywords"> 
    <id name="Id" type="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="keywordID" /> 
     <generator class="identity" /> 
    </id> 
    <property name="Value" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="keyword" not-null="true" /> 
    </property> 
    <property name="Language" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="language" not-null="true" /> 
    </property> 
    <property name="Approved" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="approved" not-null="true" /> 
    </property> 
    <property name="Custom" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="custom" not-null="true" /> 
    </property> 
    </class> 
</hibernate-mapping> 
導出的映射

這是堆棧跟蹤

at NHibernate.AdoNet.SqlClientSqlCommandSet.ExecuteNonQuery() 
at NHibernate.AdoNet.SqlClientBatchingBatcher.DoExecuteBatch(IDbCommand ps) 
at NHibernate.AdoNet.AbstractBatcher.ExecuteBatchWithTiming(IDbCommand ps) 
at NHibernate.AdoNet.AbstractBatcher.ExecuteBatch() 
at NHibernate.AdoNet.AbstractBatcher.OnPreparedCommand() 
at NHibernate.AdoNet.AbstractBatcher.PrepareCommand(CommandType type, SqlString sql, SqlType[] parameterTypes) 
at NHibernate.AdoNet.AbstractBatcher.PrepareBatchCommand(CommandType type, SqlString sql, SqlType[] parameterTypes) 
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session) 
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Object obj, ISessionImplementor session) 
at NHibernate.Action.EntityInsertAction.Execute() 
at NHibernate.Engine.ActionQueue.Execute(IExecutable executable) 
at NHibernate.Engine.ActionQueue.ExecuteActions(IList list) 
at NHibernate.Engine.ActionQueue.ExecuteInserts() 
at NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) 
at NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object entity, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) 
at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) 
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) 
at NHibernate.Event.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) 
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event) 
at NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event) 
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event) 
at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event) 
at NHibernate.Impl.SessionImpl.Save(Object obj) 

目前,有266 016條記錄表PRODUCTS_Keywords和馬克斯(keywordID)爲8 942 223

有什麼問題的原因以及如何解決?

謝謝

回答

0

,似乎值得商榷關於您的設置是有set訪問是私有的唯一的事情。這可能是好的,但我只見過在這些情況下使用公共和保護。

你可以顯示通過流利生成的sql語句嗎?在配置Fluent時使用ShowSql(),它將向控制檯輸出它試圖執行的SQL。實際的錯誤消息似乎是SQL錯誤消息。

+0

最後,這段代碼沒有錯。該錯誤來自之前執行的另一個查詢。使用調試,錯誤似乎來自我顯示的代碼。 – Z0RrO 2011-02-28 21:22:59