我正在使用 Fluent NHibernate 并尝试存储图像。小图像工作,但大图像不工作,我在保存到数据库(SQL Server)时收到此错误:
例外:为 CFC.Domain.Vehicle.Image 脱水属性值时出错
内部异常: 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: byte[] 值的长度超过了映射/参数中配置的长度。]
NHibernate.Type.AbstractBinaryType.Set(IDbCommand cmd, Object value, Int32 index) +207
NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd, Object value, Int32 index) +397
NHibernate.Type.NullableType.NullSafeSet(IDbCommand st, Object value, Int32 index, Boolean[] settable, ISessionImplementor session) +62
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index) +350[PropertyValueException:为 CFC.Domain.Vehicle.Image 脱水属性值时出错]
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydra(对象 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 session,IBinder binder)+102
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Boolean[] notNull, SqlCommandInfo sql, Object obj, ISessionImplementor session) +265
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Object obj, ISessionImplementor session) +358
NHibernate.Action.EntityIdentityInsertAction.Execute() +262
NHibernate.Engine.ActionQueue.Execute(IExecutable 可执行文件) +56
NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn,对象任何东西,IEventSource 源,布尔值 requiresImmediateIdAccess) +811
NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(对象实体,对象 id,IEntityPersister 持久化,布尔 useIdentityColumn,对象任何东西,IEventSource 源,布尔 requiresImmediateIdAccess)+543
NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(对象实体,字符串 entityName,对象任何东西,IEventSource 源,布尔值 requiresImmediateIdAccess) +257