55

在命名我的数据库表时,我更喜欢使用单数名词。然而,在 EF 代码中,生成的表始终是复数。我的 DbSet 是复数形式,我相信这是 EF 生成名称的地方,但我不想将这些名称单数化,因为我认为在代码中使用复数形式更为实用。我也尝试过覆盖设置,但无济于事。

有任何想法吗?这是我的代码,谢谢。

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>();
     }
}
4

3 回答 3

88

为此,您删除了错误的约定 ( PluralizingEntitySetNameConvention )。只需将您的OnModelCreating方法替换为以下内容即可。

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

使用 Entity Framework 6,在从 DbContext 继承的文件上:

using System.Data.Entity.ModelConfiguration.Conventions;

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
于 2011-01-25T18:06:12.907 回答
3

您还可以更改属性值:

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

于 2015-07-29T14:23:53.770 回答
1

PluralizingTableNameConvention 的定义位置已移至:

using System.Data.Entity.ModelConfiguration.Conventions;

于 2014-06-24T05:02:17.363 回答