Tu *_*ran 8 c# entity-framework
我在ORM框架方面有过一些经验,比如Hibernate,甚至是Entity Framework 3.0.
默认情况下,这些框架对表使用单数名称.例如,类User将映射到表User.
但是当我使用Visual Studio 2012迁移到EF 5.x时,它使用复数名称并导致许多错误,除非我使用TableAttributeas 手动映射该类:
[Table("User")]
public class User {
// ...
}
Run Code Online (Sandbox Code Playgroud)
没有TableAttribute,如果我有DbContext如下:
public CustomContext : DbContext {
// ...
public DbSet<User> Users { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后打电话:
var list = db.Users.ToList();
Run Code Online (Sandbox Code Playgroud)
生成的sql看起来像:
Select [Extent1].[Username] From [Users] as [Extent1]
Run Code Online (Sandbox Code Playgroud)
因此,将发生错误,因为我没有任何名为Users的表.此外,我将单数形式的名称表格称为复数形式.你可以在这个链接中看到原因
我想知道为什么微软以这种方式实现EF 5.x而不是EF 3.0?
更新:
我们可以通过在上下文类中使用此代码告诉EF不使用复数名称:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)
即使EF工具生成多个名称,它应该保留到原始数据库的映射,不应该吗?因为某些用户可能想要更改其类中的一些字段名称.EF 3.0运行良好,但EF 5.x没有.
伙计们,请你给我一个理由!
该约定在PluralizingTableNameConvention默认定义的约定中定义DbModelBuilder.Conventions
如果要将其从所有表中排除,可以使用此问题中的代码.
为什么这样做是按照它的方式完成的,我不知道,但我必须说我个人在营地认为表名应该是多元的:)
在随SQL Server实例提供的示例数据库中,Northwind具有复数形式,而AdventureWorks使用单数形式,因此最多没有既定标准.我对每一个都进行了不少讨论,但是每个人都可以同意的一点是,一旦选择了命名策略,你就应该坚持下去.
| 归档时间: |
|
| 查看次数: |
5529 次 |
| 最近记录: |