Posso adicionar atributos do MVC 2 DataNotation às propriedades existentes?
-
18-09-2019 - |
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?
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:
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.