我正在使用流利NHibernate,并试图存储图像。小图像的工作,但较大的图像不这样做,我收到此错误时,保存到数据库(SQL Server):为CFC.Domain.Vehicle.ImageNHibernate图像存储 - 字节[]值的长度超过配置的长度
错误脱水属性值:异常
内部异常: byte []值的长度超过映射/参数中配置的长度。
这是我的映射:
mapping.Table("Vehicle");
mapping.Id(x => x.Id, "VehicleID");
mapping.Map(x => x.Year).Not.Nullable();
mapping.Map(x => x.Image).CustomSqlType("VARBINARY(MAX)").Length(int.MaxValue);
“图像” 属性是一个字节[]。
请注意CustomSqlType和长度,它会在数据库中创建适当的nvarchar(max)列。我读过无数其他帖子在谈论类似的问题,但没有涵盖这个具体的错误。并不是数据被截断并保存,它只是在发送SQL查询之前出错。
我测试的图像只是标准的Windows 7示例图像(当然是Penguins.jpg),但1kb左右的图像可以正常工作。
我很感激帮助!如果有帮助,这是堆栈跟踪的开始。
[HibernateException的:字节[]值的长度超过在映射/参数配置的长度 。]
NHibernate.Type.AbstractBinaryType.Set(IDbCommand的CMD,对象的值, 的Int32指数)+ 207
NHibernate.Type.NullableType.NullSafeSet(IDbCommand的CMD,对象的值, 的Int32指数)397
NHibernate.Type.NullableType.NullSafeSet(IDbCommand的ST,对象的值, 的Int32索引,布尔[]可固化,ISessionImplementor会话)+62
NHibernate.Persister.Entity。 AbstractEntityPersister.Dehydrate(对象 ID,对象[]字段,对象ROWID,布尔[] includeProperty, 布尔[] [] includeColumns,的Int32表,IDbCommand的声明, ISessionImplementor会议的Int32索引)+350[PropertyValueException :错误脱水属性值 CFC.Domain.Vehicle.Image]
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(对象 ID,对象[]字段,对象ROWID,布尔[] includeProperty, 布尔[] [] includeColumns,Int32表,IDbCommand语句, ISessionImplementor会话,Int32索引)+510
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id,Object [] fields,Boolean [] includeProperty,Boolean [] [] includeColumns,Int32 j,IDbCommand st,ISessionImplementor会话) +59 NHibernate.Persister.Entity .GeneratedIdentifierBinder.BindValues(IDbCommand ps)+79
NHibernate.Id.Insert.AbstractReturningDelegate。PerformInsert(SqlCommandInfo insertSQL,ISessionImplementor会话的IBinder粘合剂)102
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象[] 字段,布尔[] NOTNULL,SqlCommandInfo SQL,对象OBJ, ISessionImplementor会话)265
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象[] 字段,对象OBJ,ISessionImplementor会话)358
NHibernate.Action.EntityIdentityInsertAction.Execute()262
NHibernate.Engine.ActionQueue.Execute(IExecutable可执行)+56
NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrRepl icate(对象 实体的EntityKey键,IEntityPersister留存,布尔 useIdentityColumn,任何对象,IEventSource源,布尔 requiresImmediateIdAccess)811
NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(对象 实体对象ID,IEntityPersister留存,布尔 useIdentityColumn,任何对象,IEventSource源,布尔 requiresImmediateIdAccess)543
NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(对象 实体,字符串的entityName,对象什么,IEventSource源, 布尔requiresImmediateIdAccess)+257
卸下长度映射? – dotjoe
感谢您的评论。不幸的是,这是没有长度的同样的问题。我在上面添加了一个堆栈跟踪以帮助。 – jkriddle