【问题标题】:EF pluralize table's name on generating database from modelEF在从模型生成数据库时将表名复数
【发布时间】:2013-06-17 16:42:31
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 查看 edmx 文件选项 (F4):自动复数。
  • @abatishchev 我在 VS 2010 中找不到 edmx 选项。
  • @abatishchev 我禁用了它,但同样的问题
  • 我只想要有效的答案!
  • 嘿,我很高兴你找到了解决方案,我担心你没有。干杯!

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


【解决方案1】:

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

更新

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

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

还需要添加命名空间

System.Data.Entity.ModelConfiguration.Conventions;

希望对你有帮助

【讨论】:

  • 不工作!当我添加您的namespace 时,它也无法识别DbModelBuilder
  • 您需要确保在项目中添加对 MSDN 链接中列出的程序集的引用。程序集是 Microsoft.Data.Scheme.dll / Microsoft.Data.Schema.SchemaModel.. 我可以知道您使用的是哪个版本的 EF 吗?
  • 我用的是VS2010但是不知道EF是哪个版本,怎么知道呢?
  • 谢谢..我已经更新了答案中的代码,你能试试吗
  • 再次不起作用。它无法识别PluralizingTableNameConventionModelBuilder
【解决方案2】:

创建 EDMX 文件时应取消复数标记

【讨论】:

    【解决方案3】:

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

    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    

    试试这个,也许运气好:

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

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

    • 在您的项目树中展开“References”,然后按 F4 键“EntityFramework”。
    • 右键单击您的项目并选择“管理 NuGet 包...”,从这里您可以检查版本并进行更新。

    【讨论】:

      【解决方案4】:

      原因是:

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

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

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

      【讨论】:

      • 表示上下文中不存在
      • 当我有以前版本的 Visual Studio 时发生这种情况,你可以尝试像 (ContextName.TableName) 这样的东西来引用表格
      猜你喜欢
      • 2021-04-13
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2018-12-12
      • 2011-02-23
      • 1970-01-01
      相关资源
      最近更新 更多