Estoy tratando de almacenar/guardar una imagen en una base de datos SQL Compact Edition (CE).Error al almacenar la imagen en SQL CE 4.0 con ASP.NET MVC 3 y Entity Framework 4.1 Código Primero
declaro el campo en mi modelo del estudiante como:
[Column(TypeName = "image")]
public byte[] Photo { get; set; }
La base de datos se crea con el tipo de datos de imagen para la columna de fotos como se puede ver aquí:
El el problema es:
Cuando ejecuto la aplicación y trato de guardar un Estudiante con una Foto de 3 MB (por ejemplo), recibo una excepción:
validationError.ErrorMessage = "The field Photo must be a string or array type
with a maximum length of '4000'."
SQL Server CE admite estos Data Types. En este comparison entre SQL Express y SQL Compact Edition (CE), tenemos que SQL CE admite el almacenamiento Binario (BLOB) mediante el uso del tipo de datos de imagen.
Image = de longitud variable de datos binarios con una longitud máxima de 2^30-1 (1,073,741,823) bytes. El almacenamiento es la longitud del valor en bytes.
La imagen debería hacer el trabajo, creo.
¿Qué estoy haciendo mal aquí? ¿Es esto un error?
Nota:
También probé la anotación de datos MaxLength:
[Column(TypeName = "image")]
[MaxLength(int.MaxValue)]
public byte[] Photo { get; set; }
pero me da esta excepción:
Binary column with MaxLength greater than 8000 is not supported.
Editar:
he encontrado el post sobre el lanzamiento de EF 4.1. Tiene la siguiente:
Cambio de longitud predeterminada de los que no son clave cuerda y columnas binarias de ‘128’ a ‘Max’. SQL Compact no admite columnas 'Max', cuando se ejecuta contra SQL compacto una convención adicional Código Primera establecerá una longitud predeterminada de 4000. Hay más detalles acerca el cambio incluida en un reciente post (enlace debajo de).
Bueno, bueno ... la única manera de que pudiera conseguir que funcione estaba haciendo lo que se describe here, es decir, el establecimiento de DbContext.Configuration.ValidateOnSaveEnabled = false
. Esta es una solución, como sugiere la publicación.
lo grande que es su imagen? –
@Alexandre: son 3 MB. –