Fluent API ou Annotation, Quem tem mais moral?
Dica EF Core
Vamos pegar o seguinte cenário para fazer essa pequena demonstração.
Nossa Classe
[Table("TabelaAnotacao")]
public class Entidade
{
public int Id { get; set; }
[Column("DescricaoAnotacao")]
public string Descricao { get; set; }
[Column("DataAnotacao")]
public DateTime Data { get; set; }
}
Nosso DBContext
public class ExemploContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=.\Sistemas;Initial Catalog=ExemploConfiguracao;Integrated Security=True");
optionsBuilder.UseLoggerFactory(new LoggerFactory().AddConsole());
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Entidade>(p =>
{
p.Property(x => x.Descricao).HasColumnName("DescricaoFluentAPI");
p.Property(x => x.Data).HasColumnName("DataFluentAPI");
p.ToTable("TabelaFluentAPI");
});
}
}
Nosso Programs.cs
class Program
{
static void Main(string[] args)
{
using(var db = new ExemploContext())
{
db.Database.EnsureCreated();
db.Set<Entidade>().Where(p => p.Descricao.Length > 0).ToList();
}
}
}
O que temos?
Bem criamos uma classe chamada Entidade onde contém nossas propriedades com anotações(Atributos), também criei nosso DbContext onde fiz as configurações no OnModelCreating com Fluent API, feito isso vamos ver os resultados pós execução do programa.
Saída SQL criação da tabela
CREATE TABLE [TabelaFluentAPI] (
[Id] int NOT NULL IDENTITY,
[DataFluentAPI] datetime2 NOT NULL,
[DescricaoFluentAPI] nvarchar(max) NULL,
CONSTRAINT [PK_TabelaFluentAPI] PRIMARY KEY ([Id])
);
Saída SQL do SELECT feito pelo EF CORE
SELECT [p].[Id], [p].[DataFluentAPI], [p].[DescricaoFluentAPI]
FROM [TabelaFluentAPI] AS [p]
WHERE CAST(LEN([p].[DescricaoFluentAPI]) AS int) > 0
Bom aqui já fica nítido que o EF Core sobrescreve as configurações feitas por anotações, dando a prioridade as configurações feita por Fluent API.
Então o que fazer?
Pois bem, a utilização do Flent API é sem dúvidas a melhor solução para utilizarmos, ué só por que sobrescreve as anotações?! Não, não por isso, é por que é muito mais completa, nos permite a extrair o máximo do EF Core, além de poder fazer configurações que são impossíveis com o uso do (Annotations).
Minha dica é: Use sempre que possível Fluent API em suas aplicações!
Pessoal, fico por aqui #dica!
Deixe um comentário