EF从模型生成数据库时复数表的名称

时间:2013-06-20 17:37:23

标签: sql visual-studio-2010 entity-framework ef-model-first pluralize

我在EF中有一些模型和表格,你可以在这里看到其中一个:

Option model

现在,当我想从模型生成数据库时,它会在生成的sql中添加's'到表的名称:

CREATE TABLE [dbo].[Options] (
[Id] int IDENTITY(1,1) NOT NULL,
[Name] nvarchar(50)  NOT NULL,
[Price] int  NOT NULL
); 

我也禁用了多个名字,但没有改变:

enter image description here

这会导致部署Web应用程序时出错。我怎样才能防止多元化?

4 个答案:

答案 0 :(得分:4)

只需覆盖OnModelCreating方法并删除“PluralizingTableNameConvention”约定。所以你告诉实体框架不要复数表名,只需添加

更新了

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

它将删除默认情况下附加到所有模型构建器

的Pluralising约定

您还需要添加命名空间

System.Data.Entity.ModelConfiguration.Conventions;

希望它会有所帮助

答案 1 :(得分:1)

在创建EDMX文件enter image description here

时,应取消选中复数形式

答案 2 :(得分:0)

似乎只能使用Code First停用复数功能。 这就是为什么以下代码不起作用的原因:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

试试这个,也许幸运的是:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Option>().ToTable("Option")
}

如果您需要知道正在使用的实体框架版本,有几种方法:

  • 在您的项目树中点击“参考”并按F4 ont“EntityFramework”。
  • 右键单击您的项目并选择“Manage NuGet packages ...”,您可以在此处查看版本并进行更新。

答案 3 :(得分:-3)

原因是:

您在数据库中创建的任何表,实体框架将其转换为类,以便您可以轻松地创建对象。

只需将后面代码中的表格验证为单数(就像EF定义的那样)。

小心! (不要在你的应用程序中使用与任何表中相同的名称命名任何页面,因为它们都被转换为类,当你打电话给表时,它会在表和页面之间丢失)。 / p>