6

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

选项模型

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

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

我也禁用了名称的复数,但没有任何改变:

在此处输入图像描述

这会导致部署 Web 应用程序时出错。如何防止多元化?

4

4 回答 4

4

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

更新

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

它将删除默认附加到所有模型构建器的复数约定

您还需要添加一个命名空间

System.Data.Entity.ModelConfiguration.Conventions;

希望它会有所帮助

于 2013-07-05T13:36:22.750 回答
2

创建 EDMX 文件时应取消选中复数标记在此处输入图像描述

于 2013-11-19T10:32:55.463 回答
0

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

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

试试这个,也许运气好:

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

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

  • 在您的项目树中展开“References”并按 F4 键“EntityFramework”。
  • 右键单击您的项目并选择“管理 NuGet 包...”,从这里您可以检查版本并更新它。
于 2013-07-09T20:38:58.100 回答
-3

原因是 :

您在数据库中创建的任何表,Entity Framework 将其转换为一个类,以便您可以轻松地从中创建对象。

只需验证后面代码中的表是否为单数(正如 EF 定义的那样)。

当心 !(不要将应用程序中的任何页面命名为与您在任何表中的名称相同的名称,因为它们都被转换为类,并且当您调用表时,它会在表和页面之间丢失)。

于 2013-07-08T08:20:02.483 回答