2010-05-20 19 views
17

Tengo algunas clases que leen desde tablas muy delicadas, por lo que quiero que NHibernate las use como "ReadOnly". Establecer .ReadOnly() en cada mapa de campo es realmente descuidado, y no estoy seguro de que confíe en él. ¿Cómo configuro una clase para que sea totalmente de solo lectura, como puedo hacer fácilmente con las asignaciones XML tradicionales?Fluidez NHibernate: ¿Cómo asignar una clase completa como ReadOnly?

Editar: La respuesta funciona. Esperaba que lanzara una excepción si intentaba guardar más de un objeto ReadOnly(), pero simplemente lo hace en silencio.

Gracias.

+0

¿Alguna solución alternativa? – kaptan

+0

@kaptan: Editaré mi comentario sobre la respuesta. Funciona. Solo esperaba lanzar una excepción, pero ignora silenciosamente cualquier cambio. – rebelliard

Respuesta

32

Con Fluido NHibernate, es tan simple como:

class EntityMap : ClassMap<Entity> 
{ 
    public EntityMap() 
    { 
     ReadOnly(); 

     // Mappings 
    } 
} 
11

El ReadOnly (a) Propiedad realidad no funciona como es de esperar. El uso de esta propiedad garantiza que los objetos que recupera son de solo lectura, por lo que no puede ACTUALIZARlos. ¡Sin embargo, NO previene la creación de nuevos registros o incluso la eliminación de registros existentes en la base de datos!

+1

Hmm, no lo había notado, ¡lo cual es una locura! Supongo que una mezcla de constructor readonly y protegido funcionaría. – rebelliard

+1

Creo que "Inmutable" es un mejor nombre para él. –

+0

'ReadOnly' es la denominación Fluent, parece que lo han considerado mejor que el nombre original de NHibernate, [' mutable = "false" '] (http://nhibernate.info/doc/nhibernate-reference/mapping.html# mapping-declaration-class). Tal vez en su contexto, donde han definido las propiedades 'ReadOnly'on como una abreviatura de' insert = "false" update = "false" ', pero en mi opinión, este es un nombre desafortunado para la clase y la mutabilidad de la colección. –

Cuestiones relacionadas