EF在从模型生成数据库时会对表名进行复数化处理

6

我在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 应用程序时导致错误。如何防止复数形式?


1
查看 edmx 文件选项(F4):自动复数。 - abatishchev
@abatishchev 我在 VS 2010 中找不到 edmx 选项。 - Majid
@abatishchev 我已经禁用了它,但问题仍然存在。 - Majid
我只想要有效的答案! - Majid
嗨,我很高兴你找到了解决方案,我担心你没有。干杯! - abatishchev
@abatishchev 我的问题还没有得到解决! - Majid
4个回答

4
只需重写OnModelCreating方法并删除“PluralizingTableNameConvention”约定即可。这样,您就告诉Entity Framework不要将表名变成复数形式,只需添加即可。
已更新
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {    
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
 }

它将删除默认附加到所有模型生成器的复数规则。

您还需要添加命名空间。

System.Data.Entity.ModelConfiguration.Conventions;

希望这个能帮到您


不起作用!即使我添加了你的“命名空间”,它也无法识别DbModelBuilder - Majid
我正在使用VS2010,但我不知道EF的哪个版本。我该如何知道它? - Majid
基本上它会复制到bin目录中,所以您可以在C:驱动器中搜索Microsoft.Data.Schema.dll并将其复制到bin文件夹中..要了解更多详细信息,请访问http://msdn.microsoft.com/en-us/library/wkze6zky(v=vs.80).aspx。 - Rajeev Bera
你真的需要确定你正在使用哪个版本的EF。这在CTP5和4.1之间从ModelBuilder更改为DbModelBuilder。 - Nick
+1 - 这个答案是正确的。@majidgeek - 你需要同时包含 using System.Data.Entity - Travis J
显示剩余6条评论

2
当您创建EDMX文件时,应取消复数勾选框。 enter image description here

0

似乎只有使用Code First才能禁用复数形式功能。 这就是为什么以下代码无法工作的原因:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

试试这个,也许会有好运:

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

如果你需要知道你正在使用哪个版本的Entity Framework,有几种方法可以实现:
  • 在你的项目树中展开 "References" 并按 F4 键,在 "EntityFramework" 上查看。
  • 右键单击你的项目并选择 "Manage NuGet packages...",从这里你可以检查版本并更新它。

-3
原因是:
任何你在数据库中创建的表,实体框架都会将其转换为类,以便你可以轻松地创建对象。
只需在代码后台验证表名为单数(就像EF定义的一样)。
要小心!(不要将应用程序中的任何页面命名为与表中相同的名称,因为它们都被转换为类,当你想调用表时,它会在表和页面之间迷失)。

上下文中不存在所述内容。 - Majid
这种情况发生在我使用旧版Visual Studio时,你可以尝试类似于(ContextName.TableName)这样的方式来引用表格。 - Ali Alyousuf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接