Pergunta

Estou usando uma classe gerada como modelo e gostaria de adicionar atributos DataNotation para algumas de suas propriedades. Como é um código gerado, não quero adicionar as anotações diretamente. Existe outra maneira de anexá -los a uma propriedade?

Eu pensei em tornar o modelo uma interface e usando uma classe parcial para que a classe gerada se inscreva. Existe uma solução menos elaborada, assumindo que isso funcionaria?

Foi útil?

Solução

Sim existe. Você precisa criar a classe de metadados que terá as mesmas propriedades que seu modelo original e conectá -lo ao seu modelo com o atributo Metadatatype:

[MetadataType(typeof(MyModelMetadata))]
public partial class OriginalMyModel
{
}

public class MyModelMetadata
{
    [Required]
    public string MyProperty;  

    // ...
}

No exemplo, o Ebove OriginalModel é a sua classe de modelo adequada, e o MyModelMetadata é uma classe usada apenas para anotar propriedades. O MyModelMetadata deve ter as mesmas propriedades que seu modelo.

Outras dicas

Você pode usar o atributo Metadatatype em sua aula:

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotações.metadatypeattribute.aspx

Na prática, eu vi os metadados sair de sincronia com um modelo gerado com bastante frequência, o que pode levar a algumas dores de cabeça. Você pode procurar um mecanismo de validação alternativo em vez de anotações de dados.

Eu tenho usado Validação fluente, o que é muito fácil de pegar e começar a usar. Existe até uma validação fluente para xval Peça de integração no Fluent Validation 2.0 (ainda na versão beta) que você pode trazer para o seu projeto para validação do lado do cliente.

A validação fluente permite definir sua validação em uma classe separada. Tudo o que você precisa fazer é adicionar um atributo à sua classe gerada, dizendo qual validador usar, o que poderia ser realizado por meio de classes parciais.

Como alternativa, você pode criar modelos específicos de visualização que são mapeados a partir do seu modelo de domínio que contêm suas anotações de dados. Nesse caso, simplifique o mapeamento de vaivém usando algo como Automapper. Então, se o seu modelo de domínio mudar, você obterá erros de tempo de compilação em comparação com a abordagem de metadados.

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