2010-06-22 13 views
8

Digamos que tengo el siguiente entidad:¿Cómo puedo mapear una propiedad sin setter y sin propiedad de respaldo con NHibernate?

public class CalculationInfo 
{ 
    public virtual Int64 Id { get; set; } 

    public virtual decimal Amount { get; set; } 

    public virtual decimal SomeVariable { get; set; } 

    public virtual decimal SomeOtherVariable { get; set; } 

    public virtual decimal CalculatedAmount 
    { 
     get 
     { 
      decimal result; 

      // do crazy stuff with Amount, SomeVariable and SomeOtherVariable 

      return result; 
     } 
    } 
} 

Básicamente quiero leer y escribir todos los campos a mi base de datos con NHibernate con la excepción de CalculatedAmount, que simplemente quiero escribir y no leer de nuevo en.

Cada problema similar y la respuesta correspondiente se ha tratado de especificar una tienda de respaldo para el valor, que no tendré en este escenario.

¿Cómo puedo lograr esto usando Fluent NHibernate?

Gracias!

ACTUALIZACIÓN: Aquí es lo que he intentado, y el error que conduce a:

Aquí está mi mapeo de la propiedad ...

Map(x => x.CalculatedAmount) 
     .ReadOnly(); 

y la excepción se produce ...

no se pudo encontrar un regulador para la propiedad 'CalculatedAmount' en la clase 'xxx.CalculationInfo'

Respuesta

2

No consumo Fluido, pero en la asignación de una propiedad PERSISTED sin colocador es correlacionado con access="readonly", a fin de buscar algo así como .Readonly()

(Sólo lectura es del modelo perspectiva; el valor se escribe en la base de datos y se utiliza en cheques sucios)

+0

He actualizado mi respuesta para hacer frente a eso ... que fue una de las primeras cosas Me encontré, pero terminé con la excepción anterior. ¿Puedes pensar en una configuración en NHibernate que bloquearía su funcionamiento? –

+0

¿Se puede exportar el XML generado por FluentNH? –

0

Parece que es un valor calculado. Si puede calcular este valor en cualquier momento dado, ¿por qué almacenarlo?

+0

Gran pregunta ... la respuesta corta es no repudio. Incluso si mi método de cálculo cambia, siempre puedo señalar lo que se calculó en un punto dado en el tiempo/correlacionado con una acción. –

+0

@Brandon Linton: suficiente. +1. ¿Hay alguna razón por la cual un campo de respaldo privado no es deseable, o es más un problema de estética? –

+0

simplemente nunca terminará usándose ... el cálculo debe realizarse siempre, ya que los factores variables pueden cambiar en cualquier momento. –

5

me di cuenta de que la forma en obtener esta asignación de trabajo en Fluido NHibernate es simplemente añadir la propiedad de acceso:

Map(x => x.CalculatedAmount).Access.ReadOnly(); 
Cuestiones relacionadas