2011-01-25 109 views
51

我更喜欢在命名我的数据库表时使用单数名词。然而,在EF代码中,生成的表格总是复数。我的DbSets是复数形式,我相信是EF生成名称的地方,但我不想将这些名称单数化,因为我相信在代码中使用复数形式更为实用。我也试图压倒设置,但无济于事。如何在EF Code First中对我的表格进行单数化处理?

任何想法?这是我的代码和谢谢。

MyObjectContext.cs

public class MyObjectContext : DbContext, IDbContext 
{ 
    public MyObjectContext(string connString) : base(connString) 
    { 
    } 
    public DbSet<Product> Products {get;set;} 
    public DbSet<Category> Categories {get;set;} 
    //etc. 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>(); 
    } 
} 

回答

83

您已删除针对此目的的错误约定(PluralizingEntitySetNameConvention)。只需将您的OnModelCreating方法替换为下面的方法,您就可以轻松前往。

using System.Data.Entity.ModelConfiguration.Conventions.Edm.Db; 
... 
protected override void OnModelCreating(ModelBuilder modelBuilder) 
{  
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
} 

实体框架6,在你的文件,从的DbContext继承:

using System.Data.Entity.ModelConfiguration.Conventions; 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
} 
+15

名称从CTP5更改为EF 4.1。这现在叫做DbModelBuilder。 – campo 2011-07-18 05:44:12

1

PluralizingTableNameConvention定义的位置已移到:

using System.Data.Entity.ModelConfiguration.Conventions;

2

您也可以更改属性值:

在工具菜单上,单击选项。 在选项对话框中,展开数据库工具。 单击O/R设计器。 将多个名称设置为Enabled = False以设置O/R设计器,使其不会更改类名称。 将名称多重化设置为Enabled = True,以将多元化规则应用于添加到O/R设计器的对象的类名称。