2012-01-06 2 views
11

Ho una classe POCO denominata Attachment che esegue il mapping su una tabella in SqlServer con un campo VarBinary (max) in esso. Il campo contiene file.Mappatura varbinary (max) EF4 - Codice primo errore

La classe POCO assomiglia a questo

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; } 
} 

la mappatura assomiglia a questo

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

Tuttavia la mappatura sta gettando un errore

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

La mappatura funziona bene se uso un array di byte ma sembra che stia corrompendo i dati durante il passaggio.

Il file del database ha una stringa binaria iniziale come: -

0x504B0304140008000800027923400000000000000000000000001F000000 

Credo che questo sia un file JPG. Qualsiasi aiuto per ottenere il file dal DB in un unico pezzo sarebbe apprezzato.

+1

Google suggerisce che '0x504B0304' è un indicatore di un file zip: http://www.google.co.uk/search?q=0x504B0304, se questo è di aiuto? (Avrei pensato che un array 'byte [] 'è il modo giusto per procedere, comunque.) –

+0

Cosa ti fa pensare che sia corrotto? – ken2k

+0

Grazie Owen, è esattamente quello che era. Ha senso ora so di cosa si tratta. Ora sono in grado di decomprimere il file e trasmettere il contenuto al browser o al file system. –

risposta

21

Binary il tipo di dati è solo per Linq-to-Sql. EF non è in grado di lavorare con esso. Il tipo di dati corretto per EF è l'array di byte (byte[]).