我有一些 ORM 框架的经验,比如 Hibernate,甚至 Entity Framework 3.0。
默认情况下,这些框架使用表的单数名称。例如,类 User 将映射到表 User。
TableAttribute
但是当我使用 Visual Studio 2012 迁移到 EF 5.x 时,它使用复数名称并导致许多错误,除非我使用as手动映射该类:
[Table("User")]
public class User {
// ...
}
没有TableAttribute
,如果我有DbContext
如下:
public CustomContext : DbContext {
// ...
public DbSet<User> Users { get; set; }
}
然后调用:
var list = db.Users.ToList();
生成的 sql 如下所示:
Select [Extent1].[Username] From [Users] as [Extent1]
因此,将发生错误,因为我没有任何名为Users的表。此外,我将单数形式的名称表称为复数形式。您可以在此链接中看到原因
我想知道为什么微软以这种方式实现 EF 5.x 而不是与 EF 3.0 相同?
更新:
我们可以通过在上下文类中使用以下代码来告诉 EF 不要使用复数名称:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
}
即使 EF 工具生成复数名称,它也应该保留到原始数据库的映射,不是吗?因为一些用户可能想要更改他们类中的一些字段名称。EF 3.0 运行良好,但 EF 5.x 不行。
各位大侠,请给个理由好吗!