2009-01-31 27 views
8

Si tengo una clase declarados como:Blob Las corrientes con NHibernate

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

¿Cómo puedo usar asignaciones de NHibernate que persista la propiedad MyData hacia y desde la base de datos?

Respuesta

13

Puede usar un Stream usando un tipo personalizado y asignarlo de acuerdo con sus necesidades de almacenamiento. Pero hay algunos problemas con el uso del objeto Stream como menciono en mi blog series about lazy streaming of BLOBs and CLOBs with NHibernate.

Lo que realmente necesita es un objeto Blob que a su vez puede crear un flujo para leer datos. Como Stream contiene información sobre la posición desde la que está leyendo y espera ser cerrada y eliminada, puede crear algunos problemas cuando se usa directamente en un modelo de dominio.

Sugiero que eche un vistazo a the blog series, así como el código fuente del NHibernate.Lob project. Incluye varias opciones de mapeo para tal problema. Un poco escasamente documentado hasta ahora, pero viene más.

+4

FYI el proyecto NHibernate.Lob es un poco incompleto y no ha recibido una actualización en mucho tiempo. Después de haber intentado usar esto en un proyecto reciente, encontré varios problemas (es decir, la recolección de basura no se implementó, no funciona con el caché de segundo nivel, etc.), así que decidí bifurcarlo y repararlo, puedes encontrar mi tenedor aquí: https://github.com/bittercoder/Lob – Bittercoder

+0

@Bittercoder: Gracias por su esfuerzo para arreglarlo. Estoy tratando de hacer que funcione NH 3.2. –

Cuestiones relacionadas