我使用功能NHibernate,我试图存储图像。 小图像的工作,但较大的图像不这样做,并保存到数据库(SQL Server)的,当我收到此错误:
例外:误差CFC.Domain.Vehicle.Image脱水属性值
内异常:字节[]值的长度超过在映射/参数配置的长度。
这里是我的映射:
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(对象ID,对象[]字段,布尔[] includeProperty,布尔[] [] includeColumns,的Int32Ĵ,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.PerformSaveOrReplicate(对象实体的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