2011-02-28 30 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

相关问题