2010-06-22 17 views
8

Diciamo che ho il seguente entità:Come mappare una proprietà senza setter e nessuna proprietà di supporto fluente 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; 
     } 
    } 
} 

Fondamentalmente voglio leggere e scrivere tutti i campi per il mio database con NHibernate con l'eccezione di CalculatedAmount, che ho semplicemente voglia di scrivere e non leggere di nuovo.

Ogni problema simile e la risposta corrispondente si sono occupati di specificare un backing store per il valore, che non avrò in questo scenario.

Come posso eseguire questa operazione utilizzando Fluent NHibernate?

Grazie!

UPDATE: Ecco quello che ho provato, e l'errore che porta a:

Ecco la mia mappatura per la proprietà ...

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

E l'eccezione produce ...

Impossibile trovare un setter per la proprietà 'CalculatedAmount' in classe 'xxx.CalculationInfo'

risposta

2

Io non uso perfetto, ma nella mappatura di una proprietà persistente senza setter è mappato con access="readonly", in modo da cercare qualcosa di simile .Readonly()

(sola lettura è dal modello prospettiva; il valore viene scritto nel DB e utilizzato nei controlli sporchi)

+0

Ho aggiornato la mia risposta per affrontare che ... è stata una delle prime cose Mi sono imbattuto, ma ho comunque finito con l'eccezione sopra. Riesci a pensare a un'ambientazione in NHibernate che bloccherebbe questo funzionamento? –

+0

È possibile esportare l'XML generato da FluentNH? –

0

Sembra che sia un valore calcolato. Se è possibile calcolare questo valore in qualsiasi momento, quindi perché memorizzarlo?

+0

Grande domanda ... la risposta breve è il non ripudio. Anche se il mio metodo di calcolo cambia, posso sempre indicare ciò che è stato calcolato in un dato momento nel tempo/correlato a un'azione. –

+0

@Brandon Linton: abbastanza giusto. +1. C'è qualche ragione per cui un backing field privato non è desiderabile o è più una questione di estetica? –

+0

non finirebbe mai per essere usato ... il calcolo dovrebbe essere eseguito ogni volta, poiché i fattori variabili possono cambiare in qualsiasi momento. –

5

ho capito che il modo in cui ottenere questa mappatura lavorare in Fluent NHibernate è quello di aggiungere semplicemente la proprietà di accesso:

Map(x => x.CalculatedAmount).Access.ReadOnly(); 
Problemi correlati