2009-01-31 19 views
8

Se ho una classe dichiarata come:persistente Blob Streams con NHibernate

public class MyPersistentClass 
{ 
    public int ID { get; set; } 
    public Stream MyData {get;set; } 
} 

Come posso utilizzare mappature di NHibernate a persistere la proprietà MyData da e verso il database?

risposta

13

È possibile utilizzare un flusso utilizzando un tipo personalizzato e mapparlo in base alle esigenze di archiviazione. Ma ci sono alcuni problemi con l'utilizzo dell'oggetto Stream come menzionato nel mio blog series about lazy streaming of BLOBs and CLOBs with NHibernate.

Ciò di cui si ha realmente bisogno è un oggetto Blob che a sua volta può creare un flusso da cui leggere i dati. Poiché Stream contiene informazioni sulla posizione dalla quale stai leggendo e si aspetta di essere chiuso e eliminato, può creare alcuni problemi se usato direttamente in un modello di dominio.

Ti suggerisco di dare un'occhiata a the blog series e al codice sorgente dello NHibernate.Lob project. Include varie opzioni di mappatura per un tale problema. Un po 'scarsamente documentato finora, ma altri stanno arrivando.

+4

FYI il progetto NHibernate.Lob è un po 'incompleto e non ha ricevuto un aggiornamento da molto tempo. Dopo aver tentato di usarlo in un progetto recente, ho riscontrato una serie di problemi (ad esempio, la raccolta dei rifiuti non è stata implementata, non funziona con la cache di secondo livello, ecc.), Quindi ho deciso di caricarli e correggerli: puoi trovare la mia forchetta qui: https://github.com/bittercoder/Lob – Bittercoder

+0

@Bittercoder: Grazie per il tuo impegno nel risolverlo. Sto cercando di farlo funzionare NH 3.2. –