Data annotation | CSharp
- Data annotation | CSharp
📌 O que são Data Annotations?
Data Annotations são atributos usados em classes e propriedades para:
- Validar dados (ex:
[Required],[StringLength],[EmailAddress]) - Controlar comportamento de mapeamento (Entity Framework)
- Controlar exibição (UI, MVC)
Eles ficam acima de classes ou propriedades e influenciam validação e metadados.
📍 1. Como usar Data Annotations
✔ Exemplo básico
public class Usuario
{
[Required(ErrorMessage = "O nome é obrigatório")]
[StringLength(50, ErrorMessage = "O nome deve ter no máximo 50 caracteres")]
public string Nome { get; set; }
[EmailAddress(ErrorMessage = "E-mail inválido")]
[Required]
public string Email { get; set; }
[Range(18, 100, ErrorMessage = "Idade deve estar entre 18 e 100")]
public int Idade { get; set; }
}
📍 2. Principais Data Annotations
🔹 Validação
| Atributo | Função |
|---|---|
[Required] | Campo obrigatório |
[StringLength(x)] | Tamanho máximo e mínimo da string |
[MaxLength] / [MinLength] | Tamanho máximo/mínimo |
[Range(min, max)] | Validação numérica |
[EmailAddress] | Valida formato de e-mail |
[Phone] | Valida telefone |
[Url] | Valida URLs |
[RegularExpression] | Expressão regular |
[Compare] | Compara com outra propriedade |
📍 3. Como validar Data Annotations manualmente (C# puro)
using System.ComponentModel.DataAnnotations;
public List<ValidationResult> ValidarObjeto(object obj)
{
var resultados = new List<ValidationResult>();
var contexto = new ValidationContext(obj);
Validator.TryValidateObject(obj, contexto, resultados, true);
return resultados;
}
✔ Uso:
var usuario = new Usuario { Nome = "", Email = "errado", Idade = 15 };
var erros = ValidarObjeto(usuario);
foreach (var erro in erros)
{
Console.WriteLine(erro.ErrorMessage);
}
📍 4. Validação automática no ASP.NET Core
No ASP.NET Core MVC ou API, basta colocar Data Annotations no modelo: A validação acontece automaticamente.
Controller de exemplo:
[HttpPost]
public IActionResult Criar([FromBody] Usuario usuario)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
return Ok("Usuário válido!");
}
A propriedade ModelState já contém os erros gerados pelas Data Annotations.
📍 5. Data Annotations no Entity Framework
Também podem controlar propriedades no banco de dados.
✔ Exemplos:
public class Produto
{
[Key]
public int Id { get; set; }
[Required]
[Column(TypeName = "varchar(100)")]
public string Nome { get; set; }
[Precision(18, 2)]
public decimal Preco { get; set; }
}
Anotações comuns no EF:
[Key][Column][Index](dependendo da versão)[Timestamp][ForeignKey][NotMapped]
📍 6. Criando Data Annotations personalizadas (Custom)
Exemplo: validar se a pessoa é maior de idade
public class MaiorIdadeAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value is DateTime dataNascimento)
{
return dataNascimento <= DateTime.Now.AddYears(-18);
}
return false;
}
}
Uso:
[MaiorIdade(ErrorMessage = "O usuário deve ser maior de idade")]
public DateTime DataNascimento { get; set; }
📍 7. Exibir mensagens personalizadas
[Required(ErrorMessage = "O nome é obrigatório")]
[StringLength(100, ErrorMessage = "Máximo de 100 caracteres")]
public string Nome { get; set; }