EF Code First – Data Annotations x Fluent API

Dec 22
2011

Ao se trabalhar com o Entity Framework usando o modo Code First há a possibilidade de se trabalhar de duas formas com as configurações do nosso Model : Data Annotations e Fluent API. Neste artigo mostarei como cada configuração sem comporta e tentarei estabelecer os prós e contras de cada uma.

Para iniciarmos crie um projeto do tipo Console Application (dê o nome que você acha mais conveniente) e usando o Nuget procure o pacote do Entity Framework e clique em Install. Conforme abaixo:

NuGet

Após isso, crie uma classe chamada Carro e adicione algumas propriedades igual ao código abaixo:

class Carro
{
    public int CarroId             { get; set; }
    public string Fabricante       { get; set; }
    public string Modelo           { get; set; }
    public string Placa            { get; set; }
}

Data Annotations

Data Annotations são atributos que aplicamos diretamente ao nosso Model com a finalidade de efetuarmos validações, definir formatos de campos, ajudar o Entity Framework no processo de geração do banco de dados, dentre outras coisas…

Vamos então alterar a nossa classe criada anteriormente.


[Table("Automoveis")]
class Carro
{
[Key]
public int CarroId { get; set; }

[Required]
public string Fabricante { get; set; }

[Required]
public string Modelo { get; set; }

[MaxLength(8)]
public string Placa { get; set; }
}

Obs: Para o código acima é necessário referenciar o assembly System.ComponentModel.DataAnnotations

O código acima efetuou as seguintes configurações:

• Esta classe será mapeada para a tabela Automóveis
• A propriedade CarroId é chave primária
• A propriedade Fabricante é obrigatória
• A propriedade Modelo também é obrigatória
• A propriedade Placa deve ter no máximo dígitos

Fluent API

O conceito de Fluent API não vêm do Code First, mas, a sua idéia principal é usar chamada de métodos para produzir código fácil de ler e entender aos olhos do desenvolvedor. Com a ajuda do IntelliSense e fazendo uso de expressões lambda podemos configurar as nossas classes usando uma classe separada só para cuidar disso.

Antes de fazermos as alterações, remova os atributos adicionados no passo anterior. Embora seja possível trabalhar das duas maneiras é recomendável usar apenas umas das duas formas.

Depois disso, crie mais uma classe chamada CarroConfiguration e adicione o código abaixo:

class CarroConfiguration : EntityTypeConfiguration<Carro>
{
    public CarroConfiguration()
    {
        ToTable("Automoveis");
        HasKey(c => c.CarroId);
        Property(c => c.Fabricante).IsRequired();
        Property(c => c.Modelo).IsRequired();
        Property(c => c.Placa).HasMaxLength(8);
    }
}

Pronto, é só isso!

As configurações acima tratam-se das mesmas configurações realizadas utilizando o Data Annotation.

Mas, para que o Entity Framework possa reconhecer a nossa classe como “configuradora” da classe Carro precisamos registrá-la no processo de criação do Model, mas, isso é assunto para outro post. =)

Conclusão

Embora os dois métodos são bem simples eu, particularmente, gosto bastante de trabalhar com a Fluent API. Isto porque a adição de inúmeros atributos no nosso Model poluirá visualmente a nossa classe e tornará a leitura complicada. Além disso, com a Fluent API temos uma separação clara de responsabilidade entre o Model em si a sua configuração.
Um outro ponto a se levar em consideração é que há algumas configurações que só podem ser alcançadas com a Fluent API, pois, o uso de atributos possui algumas limitações a serem levadas em consideração.

One Response to “EF Code First – Data Annotations x Fluent API”

  1. EF Code First – Criando chaves que não sejam Identity « Robson Ramos says:

    [...] Obs: Se você quiser aprender mais sobre o código acima, sugiro a leitura do artigo: Data Annotations x Fluent Api [...]

Leave a Reply

Visit Our Friends!

A few highly recommended friends...

Pages List

General info about this blog...