2009-01-31 16 views
8

Jeśli mam klasy zadeklarowane jako:Utrzymujące Blob Strumienie z NHibernate

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

Jak mogę użyć mapowania NHibernate do utrzymują właściwość Mydata do iz bazy danych?

Odpowiedz

13

Możesz użyć strumienia, używając niestandardowego typu i zmapować go zgodnie z potrzebami przechowywania. Ale są pewne problemy z używaniem obiektu Stream, o czym wspomniałem w moim blog series about lazy streaming of BLOBs and CLOBs with NHibernate.

Tym, czego naprawdę potrzebujesz, jest obiekt Blob, który z kolei może utworzyć strumień do odczytu danych. Ponieważ strumień zawiera informacje o pozycji, z której czytasz, i spodziewa się, że zostanie zamknięty i usunięty, może powodować pewne problemy, gdy jest używany bezpośrednio w modelu domeny.

Sugeruję, aby przyjrzeć się the blog series, a także kodu źródłowego NHibernate.Lob project. Zawiera różne opcje mapowania dla właśnie takiego problemu. Trochę mało udokumentowana do tej pory, ale coraz więcej.

+4

FYI Projekt NHibernate.Lob jest trochę niekompletny i nie otrzymał aktualizacji od dłuższego czasu. Próbując użyć tego w ostatnim projekcie, znalazłem wiele problemów (np. Nie zostało zaimplementowane zbieranie śmieci, nie działa z pamięcią podręczną drugiego poziomu itp.) - postanowiłem więc je rozwidlić i naprawić - można znaleźć moje widły tutaj: https://github.com/bittercoder/Lob – Bittercoder

+0

@Bittercoder: Dzięki za twój wysiłek w naprawienie tego. Próbuję go uruchomić NH 3.2. –