Pregunta

Tengo una entidad Country muy simple que quiero almacenar en caché. Esto funciona perfectamente, pero quiero que se devuelva una versión clonada de la instancia en caché o que se haga de solo lectura para evitar que los desarrolladores cambien su estado.

¿Cómo lograría esto? Pensé que el método Fluent Readonly () haría cumplir esto, pero no es el caso.

Asignación de fluidos de muestra:

        Id(x => x.Id);
        Map(x => x.Name).WithLengthOf(50).Not.Nullable().Unique();
        Map(x => x.IsoCode).WithLengthOf(10).Not.Nullable().Unique();
        HasMany(x => x.States).Cascade.None().LazyLoad();          
        Cache.AsReadOnly();

Las pruebas de mi unidad indican claramente que las entidades se almacenan en caché y que la misma entidad se devuelve en las siguientes solicitudes, pero quiero que el objeto sea inmutable una vez que se carga desde el almacén persistente.

¡Gracias!

¿Fue útil?

Solución

Si desea que las instancias de su clase sean inmutables (en el sentido de que es imposible modificar las instancias de objetos), entonces deberá escribir su clase de acuerdo a esto, no tiene nada que ver con NHib o NHib Fluent. Como ejemplo, mapee NHib en campos privados o establecedores de propiedades privadas y solo exponga públicamente a los captadores de propiedades.

Con NHib es posible especificar " mutable = false " en su mapeo de clase (no estoy seguro de cómo hacer esto con FNH, lo siento). Esto no hace que el objeto sea inmutable en tiempo de ejecución, pero sí informa a NHib que no verifique si hay inserciones, actualizaciones y eliminaciones en estas entidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top