Por que o EF 5.x usa nome plural para tabela?
Eu tive algumas experiências no framework ORM, como o Hibernate, até mesmo o Entity Framework 3.0.
Por padrão, essas estruturas usam nome singular para tabela. Por exemplo, a classe User irá mapear para a tabela User.
Mas quando eu migro para o EF 5.x usando o Visual Studio 2012, ele usa o nome plural e causa muitos erros, a menos que eu mapeie manualmente essa classe usandoTableAttribute
Como:
[Table("User")]
public class User {
// ...
}
SemTableAttribute
, se eu tiver umDbContext
como abaixo:
public CustomContext : DbContext {
// ...
public DbSet<User> Users { get; set; }
}
Então chamando:
var list = db.Users.ToList();
O sql gerado se parece com:
Select [Extent1].[Username] From [Users] as [Extent1]
Portanto, o erro ocorrerá porque eu não tenho nenhuma tabela nomeadaComercial. Além disso, refiro-me a tabelas de nomes de forma singular a plural. Você pode ver porqueesse link
Gostaria de saber por que a Microsoft implementou o EF 5.x dessa maneira, e não o mesmo, com o EF 3.0?
Atualizada:
Podemos dizer que a EF não usa o nome pluralizado usando este código na classe de contexto:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
}
Mesmo se a ferramenta EF gerar nome pluralizado, ela deve manter os mapeamentos no banco de dados original, não deveria? Porque alguns usuários podem querer alterar alguns nomes de campos em suas classes. O EF 3.0 funciona bem, mas o EF 5.x não funciona.
Gente, você pode me dar uma razão, por favor!