Hoje comecei a utilizar novamente o LINQ To SQL em um projeto, sim o LINQ To SQL ainda existe, e eu gosto muito, mas por que não estou utilizando o EF4? Bom não preciso de tudo que tem no EF4 para esse projeto, o LINQ To SQL da conta do recado de sobra :).

Utilizo muito DataAnnotations com POCO no EF4, é extremamente útil para validação das propriedades das Entidades, faço toda a regra de validação diretamente na classe e só mostro as mensagens na tela para o usuário.

Não vou usar POCO no LINQ To SQL, li em algum lugar que tem como, mas não me aprofundei muito no assunto, caso alguém tenha experiência com POCO no LINQ To SQL comente por favor! :)

No exemplo eu possuo uma tabela Usuario mapeada com o LINQ To SQL.

image

Analisando o código gerado automaticamente, vemos que a classe Usuario é partial ou seja, eu posso ter outra classe Usuario no meu projeto, também partial que na compilação essas duas classes serão agrupadas.

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Usuario")]
public partial class Usuario : INotifyPropertyChanging, INotifyPropertyChanged

Então o primeiro passo é criar uma nova classe Usuario também partial.

public partial class Usuario
{
}

Agora só o que precisamos fazer é criar uma classe de Metadata com as mesmas propriedades da classe Usuario gerada pelo LINQ To SQL e com as validações desejadas. Para manter um padrão costumo chamar as classes de Metadata como {NomeClasse}Metadata então agora criamos a classe UsuarioMetadata.

public class UsuarioMetadata
{
    [Required(ErrorMessage="O Nome é de preenchimento obrigatório")]
    public string Nome { get; set; }
    [Required(ErrorMessage = "O Login é de preenchimento obrigatório")]
    public string Login { get; set; }
    [Required(ErrorMessage = "A Senha é de preenchimento obrigatório")]
    [StringLength(10, ErrorMessage = "O número máximo de caracteres para a senha é 10")]
    public string Senha { get; set; }
}

Lembrando que para utilizar os DataAnnotations precisamos adicionar o namespace System.ComponentModel.DataAnnotations. Analisando o código acima temos as validações necessárias para o Usuário, todas as propriedades são obrigatórias e a senha pode ter no máximo 10 caracteres.

O último passo é informar para a classe parcial que criamos, qual classe de Metadata ela vai utilizar, para isso utilizamos o atributo MetadataType.

[MetadataType(typeof(UsuarioMetadata))]
public partial class Usuario
{
}

Feito isso, já possuo a validação funcionando no MVC, veja abaixo.

image

image

Só eu acho que utilizar DataAnnotations é melhor que escrever valiações na tela? :)

Abraços e até o próximo artigo.

  • http://www.feliperaymundo.com.br/ Felipe Pedroti Raymundo

    Muito bom, é bem melhor do que ficar socando validação na tela… Outra coisa, tem como fazer isso passando as classes por WCF e no windows forms???

  • Daniel Leonardo da Matta

    Muito legal, teria como fazer isso com cliente Silverlight e WCF?

    Sei que sem wcf funciona perfeitamente, mas quando exporto as classe para cliente esse tipo de validação não :(

    Sera que o caminho é RIA Services?

    Abraços
    inté

  • Oops Twitter isnt working at the moment