2009-01-31 8 views
8

Wenn ich eine Klasse deklariert als:Persistierende Blob-Streams mit NHibernate

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

Wie kann ich NHibernate Zuordnungen verwenden, um die MyData Eigenschaft und aus der Datenbank zu bestehen?

Antwort

13

Sie können einen Stream mit einem benutzerdefinierten Typ verwenden und ihn entsprechend Ihren Speicheranforderungen zuordnen. Aber es gibt einige Probleme mit der Verwendung des Stream-Objekts, wie ich in meinem blog series about lazy streaming of BLOBs and CLOBs with NHibernate erwähne.

Was Sie wirklich brauchen, ist ein Blob-Objekt, das wiederum einen Stream erstellen kann, aus dem Daten gelesen werden können. Da Stream Informationen über die Position enthält, aus der Sie lesen, und erwartet, dass sie geschlossen und entsorgt wird, kann dies zu Problemen führen, wenn Sie direkt in einem Domänenmodell verwendet werden.

Ich würde vorschlagen, dass Sie einen Blick auf the blog series sowie den Quellcode der NHibernate.Lob project werfen. Es enthält verschiedene Zuordnungsoptionen für genau solch ein Problem. Ein wenig bisher kaum dokumentiert, aber mehr kommt.

+4

FYI das NHibernate.Lob-Projekt ist ein wenig unvollständig und hat seit langer Zeit kein Update erhalten. Nachdem ich versucht habe, dies bei einem kürzlichen Projekt zu verwenden, habe ich eine Reihe von Problemen festgestellt (zB Garbage Collection nicht implementiert, funktioniert nicht mit Second Level Cache) - also habe ich beschlossen, es zu forken und zu reparieren - Sie können meine Gabel finden hier: https://github.com/bittercoder/Lob – Bittercoder

+0

@Bittercoder: Danke für Ihre Mühe, es zu reparieren. Ich versuche es zur Arbeit zu bringen NH 3.2. –