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:

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.
December 22nd, 2011 at 16:32
[...] Obs: Se você quiser aprender mais sobre o código acima, sugiro a leitura do artigo: Data Annotations x Fluent Api [...]