2012-04-19 1 views
8

Sto sviluppando un'applicazione di archiviazione di file e abbiamo incorporato il tipo FileStream nel nostro database. Si prevede che il sistema supporti file di grandi dimensioni. Una parte dell'applicazione consente il caricamento collettivo di più documenti. Questi documenti devono quindi essere collegati ad altre entità all'interno del sistema.Come impedire a Entity Framework di caricare una colonna FileStream in un array di byte?

Una pagina è progettata per mostrare documenti non collegati, per consentire a un utente di collegare i documenti uno alla volta alle entità. Dopo aver eseguito alcuni test di caricamento del processo di caricamento, abbiamo rilevato che l'ingombro di memoria del processo di lavoro ASP.NET è aumentato a un GB durante il caricamento della pagina Documenti non collegati.

Dopo le indagini, sembra che Entity Framework stia caricando l'intera entità di riga del documento (incluso FileStream, convertita in un array di byte) per centinaia di documenti non collegati. Nella mia classe di repository, non salvi questo array di byte durante la conversione in un modello, ma a quel punto è troppo tardi. EF ha trascorso il tempo e la memoria per allocare l'array di byte nella rappresentazione della classe Repository.

C'è un modo che posso dire a EF di non caricare questo array di byte a meno che non lo chieda esplicitamente?

+1

http://stackoverflow.com/a/3293286/782754 Non è possibile contrassegnare una proprietà per caricamento pigro, ma è possibile utilizzare altri concetti –

risposta

11

Garrison, è possibile utilizzare una funzionalità denominata "suddivisione di entità" in cui si associano due entità correlate a una singola tabella. Quindi nella prima entità avresti tutto tranne la proprietà filestream. Nella seconda entità avresti la chiave primaria (come nella prima entità) e la proprietà filestream. Creare una relazione one: one tra le entità nel modello e quindi associare entrambe le entità alla stessa tabella. Ora l'entità con il filestream è correlata e puoi caricarla o caricarla a livello pigro come necessario. L'unico svantaggio è che non è una proprietà della tua entità principale, quindi devi navigare verso l'entità correlata e quindi la proprietà.

myEntity.MyRelatedEntity.TheFileStreamProperty

Ecco un old blog post ho scritto che mostra come fare questo in Progettazione EDM.

È anche possibile ottenere la stessa mappatura con Codice prima. Ecco un articolo MSDN che ho scritto che contiene un articolo di suddivisione delle entità. http://msdn.microsoft.com/en-us/data/hh272551

HTH Julie

+0

Grazie, Julie. Questo è proprio quello che stavo cercando! –

+0

bello da sentire! :) –