Pergunta

Suponha que eu tenha um objeto de negócios que tenha algumas propriedades que deveriam ser somente leitura.Por exemplo:

public class Order
{
     ...
     public DateTime OrderDate { get; set; }
     ...
     public decimal OrderTotal { get; set; }
}

Suponha também que OrderTotal é um valor calculado retornado por um processo armazenado que não pode ser definido pelo aplicativo (enquanto OrderDate pode).Normalmente eu simplesmente escreveria o OrderTotal sem um setter público:

public decimal OrderTotal { get; private set; }

No entanto, se eu fizer isso, o BLToolkit não definirá mais o valor desta propriedade.Eu também já tentei escrever isso como uma propriedade interna e definindo BLToolkit como um assembly amigo (InternalsVisibleTo("BLToolkit.4, PublicKey=xyz")) sem sucesso.

Como posso escrever uma propriedade sem um setter público que ainda possa ser preenchido pelo BLToolkit?

Foi útil?

Solução

Existe uma propriedade de armazenamento no atributo MapField, talvez isso ajude

    public class Class1
    {
        int _int32 = 0;
        [MapField(Storage = "_int32")]
        public int Int32
        {
            get { return _int32; }
        }
    }

Outras dicas

Não acho que você possa fazer isso, mas se bem entendi, você não precisa disso.Se OrderTotal for retornado do procedimento armazenado, não há problema se você deixá-lo como está.A menos que a classe Order esteja representando a tabela Order real no banco de dados, você não terá nenhum problema se atualizar acidentalmente o OrderTotal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top