2012-01-06 15 views
11

Tengo una clase POCO llamada Attachment que se asigna a una tabla en SqlServer con un campo VarBinary (max) en ella. El campo contiene archivos.EF4 Asignación varbinary (max) a Binary - Código Primer error

La clase POCO ve así

public class Attachment 
{ 
    public string AttachmentId { get; set; } 
    public string AttachmentTypeId { get; set; } 
    public string Title { get; set; } 
    public string Text { get; set; } 
    public Binary Data { get; set; } 
} 

El mapeo se parece a esto

modelBuilder.Entity<Attachment>().Property(a => a.Data).HasColumnName("col_data"); 

Sin embargo, el mapeo está lanzando un error

The type 'System.Date.Linq.Binary' must be a non-nullable value type in order to use it as a parameter 'T' 

El mapeo funciona bien si uso una matriz de bytes pero esto parece estar corrompiendo los datos en el camino.

El archivo de la base de datos tiene una cadena binaria inicial como: -

0x504B0304140008000800027923400000000000000000000000001F000000 

Creo que este es un archivo JPG. Cualquier ayuda para obtener el archivo de la base de datos en una sola pieza sería apreciado.

+1

Google sugiere que '0x504B0304' es un indicador de archivo comprimido: http://www.google.co.uk/search?q=0x504B0304, si eso sirve de algo? (Por cierto, hubiera pensado que una matriz 'byte []' es la forma correcta de proceder). –

+0

¿Qué te hace pensar que está dañado? – ken2k

+0

Gracias Owen, eso es exactamente lo que era. Tiene sentido ahora que sé lo que es. Ahora puedo descomprimir el archivo y transmitir los contenidos al navegador o al sistema de archivos. –

Respuesta

21

Binary tipo de datos es solo para Linq-to-Sql. EF no puede trabajar con eso. El tipo de datos correcto para EF es el conjunto de bytes (byte[]).

Cuestiones relacionadas