Estoy usando Fluiber NHibernate y estoy tratando de almacenar una imagen. Pequeñas imágenes funcionan, pero las imágenes más grandes no lo hacen, y yo recibo este error al guardar en la base de datos (SQL Server):Almacenamiento de imagen de NHibernate: la longitud del valor del byte [] supera la longitud configurada
Excepción: Error valor de la propiedad deshidratante para CFC.Domain.Vehicle.Image
Excepción interna: La longitud del valor del byte [] excede la longitud configurada en la asignación/parámetro.
Aquí es mi mapeo:
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);
La propiedad "Imagen" es un byte [].
Tenga en cuenta CustomSqlType y la longitud, que crea la columna adecuada nvarchar (max) en la base de datos. He leído un sinnúmero de otras publicaciones hablando de problemas similares, pero ninguna cubre este error específico. No es que los datos se trunquen y luego se guarden, sino que se equivocan antes de enviar la consulta SQL.
La imagen con la que estoy probando es solo las imágenes de muestra estándar de Windows 7 (Penguins.jpg, por supuesto) pero una imagen de alrededor de 1kb funciona bien.
¡Agradezco la ayuda! Aquí está el comienzo del seguimiento de la pila si ayuda.
[HibernateException: La longitud del valor de byte [] excede la longitud configurado en el mapeo/parámetro.]
NHibernate.Type.AbstractBinaryType.Set (cmd IDbCommand, del valor del objeto, índice Int32) + 207
NHibernate.Type.NullableType.NullSafeSet (IDbCommand cmd, del valor del objeto, índice Int32) 397
NHibernate.Type.NullableType.NullSafeSet (IDbCommand st, del valor del objeto, índice Int32, Boolean [] ajustable, sesión ISessionImplementor) +62
NHibernate.Persister.Entity. AbstractEntityPersister.Dehydrate (Object ID , objeto campos [], objeto ROWID, Boolean [] includeProperty, Boolean [] [] includeColumns, mesa Int32, declaración IDbCommand, sesión ISessionImplementor, índice Int32) 350[PropertyValueException : Error deshidratante valor de propiedad para CFC.Domain.Vehicle.Image]
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate (Object Identificación, objeto campos [], de objetos rowid, Boolean [] includeProperty, Boolean [] [] include Columnas, tabla Int32, instrucción IDbCommand, sesión ISessionImplementor, índice Int32) +510
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate (Object Identificación, Object [] campos, Boolean [] includeProperty, Boolean [] [] includeColumns, Int32 j, IDbCommand st, sesión ISessionImplementor) 59 NHibernate.Persister.Entity .GeneratedIdentifierBinder.BindValues (IDbCommand ps) +79
NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert (SqlCommandInfo insertSQL, sesión ISessionImplementor, IBinder aglutinante) 102
NHibernate.Persister.Entity.AbstractEntityPersister.Insert (Object [] campos, Boolean [] notnull, SqlCommandInfo sql, Object obj, sesión ISessionImplementor) 265
NHibernate.Persister.Entity.AbstractEntityPersister.Insert (Object [] campos, objeto obj, sesión ISessionImplementor) 358
NHibernate.Action.EntityIdentityInsertAction.Execute (262)
NHibernate.Engine.ActionQueue.Execute (IExecutable ejecutable) +56
NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrRepl icar (Objeto entidad, clave EntityKey, IEntityPersister persister, Boolean useIdentityColumn, objeto nada, fuente IEventSource, Boolean requiresImmediateIdAccess) 811
NHibernate.Event.Default.AbstractSaveEventListener.PerformSave (Objeto entidad, ID del objeto, IEntityPersister persister, Boolean useIdentityColumn, de objetos nada, fuente IEventSource, Boolean requiresImmediateIdAccess) 543
NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId (Object entidad, cadena entityName, de objetos nada, fuente IEventSource, Boolean requiresImmediateIdAccess) 257
quitar la asignación de longitud? – dotjoe
Gracias por el comentario. Lamentablemente, es el mismo problema sin la longitud. Agregué un rastro de pila arriba para ayudar también. – jkriddle