2010-06-22 6 views
8

Powiedzmy mam następujące jednostki:Jak mapować nieruchomość bez funkcji ustawiającej i bez właściwości zabezpieczających z 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; 
     } 
    } 
} 

Zasadniczo Chcę pisać i czytać wszystkie pola do mojej bazy danych z NHibernate z wyjątkiem CalculatedAmount, który po prostu chce napisać, a nie czytać z powrotem w.

W każdym podobnym numerze i odpowiadającej odpowiedzi zajęło się określeniem magazynu rezerwowego dla wartości, którego nie będę miał w tym scenariuszu.

Jak mogę to zrobić, korzystając z Fluent NHibernate?

Dzięki!

UPDATE: Oto co próbowałem, a błąd prowadzi do:

Oto mój mapowania dla właściwości ...

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

i wyjątek to daje ...

nie można znaleźć setter dla własności 'CalculatedAmount' w klasie 'xxx.CalculationInfo'

Odpowiedz

2

nie używam Płynna, ale w mapowaniu utrwalonej nieruchomość bez seter jest odwzorowany z access="readonly", więc szukać czegoś podobnego .Readonly()

(tylko do odczytu jest od modelu perspektywy; wartość jest zapisana do DB i używana w brudnych kontrolach)

+0

zaktualizowałem moją odpowiedź na adres, który ... był to jeden z pierwszych rzeczy Natknąłem się, ale wciąż kończyłem z wyjątkiem powyżej. Czy możesz pomyśleć o ustawieniu w NHibernate, które zablokowałoby to działanie? –

+0

Czy można wyeksportować plik XML wygenerowany przez FluentNH? –

0

Wygląda na to, że jest to obliczona wartość. Jeśli możesz obliczyć tę wartość w danym momencie, to po co ją przechowywać?

+0

Świetne pytanie ... krótka odpowiedź to niezaprzeczalność. Nawet jeśli moja metoda obliczeń ulegnie zmianie, zawsze mogę wskazać, co zostało obliczone w danym momencie/skorelowane z działaniem. –

+0

@Bandon Linton: Uczciwa. +1. Czy istnieje jakikolwiek powód, dla którego prywatne pole wsparcia jest niepożądane, czy też jest to bardziej kwestia estetyki? –

+0

po prostu nigdy się nie przyzwyczai ... obliczenia powinny być wykonywane za każdym razem, ponieważ zmienne czynniki mogą się zmieniać w każdej chwili. –

5

zorientowali się, że droga dostać to odwzorowanie pracy w Fluent NHibernate jest po prostu dodać właściwość dostępu:

Map(x => x.CalculatedAmount).Access.ReadOnly(); 
Powiązane problemy