为什么 EF 5.x 对表使用复数名称?

2023-11-24

我对 ORM 框架(例如 Hibernate,甚至 Entity Framework 3.0)有一些经验。

默认情况下,这些框架使用表的单数名称。例如,类 User 将映射到表 User。

但是,当我使用 Visual Studio 2012 迁移到 EF 5.x 时,它使用复数名称并导致许多错误,除非我使用手动映射该类TableAttribute as:

[Table("User")]
public class User {
    // ...
}

Without TableAttribute,如果我有一个DbContext如下:

public CustomContext : DbContext {
    // ...
    public DbSet<User> Users { get; set; }
}

然后调用:

var list = db.Users.ToList();

生成的 sql 如下所示:

Select [Extent1].[Username] From [Users] as [Extent1]

因此,会发生错误,因为我没有任何名为Users。此外,我将单数形式的名称表称为复数形式。你可以看到为什么这个链接

我想知道为什么 Microsoft 以这种方式实现 EF 5.x,而不是与 EF 3.0 相同?

Updated:

我们可以通过在上下文类中使用以下代码来告诉 EF 不要使用复数名称:

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

    base.OnModelCreating(modelBuilder);
}

即使 EF 工具生成复数名称,它也应该保留到原始数据库的映射,不是吗?因为有些用户可能想要更改其类上的一些字段名称。 EF 3.0 运行良好,但 EF 5.x 则不然。

各位,请给我一个理由吧!


该约定定义于PluralizingTableNameConvention默认定义的约定DbModelBuilder.Conventions

如果您想将其从所有表中排除,可以使用以下代码这个问题.

我不知道为什么要这样做,但我必须说,我个人认为表名应该是复数的:)

在随 SQL Server 实例提供的示例数据库中,Northwind 使用复数形式,而 AdventureWorks 使用单数形式,因此最多没有既定的标准。我对每一个都进行了很多支持或反对的讨论,但每个人都同意的一件事是,一旦选择了命名策略,你应该坚持下去。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 EF 5.x 对表使用复数名称? 的相关文章

随机推荐

  • Python-查找内存中的当前对象

    有没有办法找到当前内存中的对象 包括它们的名称 它们所在的位置和模块名称等 任务管理器中 main 方法之前的进程 Python exe 的内存占用为 15MB main方法完成第一次迭代后 进程Python exe内存大小为250MB 我
  • node.nextSibling 和 ChildNode.nextElementSibling 之间有什么区别?

    div Here is div 01 div div Here is div 02 div 它们不是同一件事吗 两者都返回紧随其后的节点 我读了很多文章 但在我看来都喜欢同样的东西 但不知道在哪里使用其中一个与另一个 nextElement
  • Bootstrap 方法返回 null - Android 在启动时立即崩溃

    React Native 和 React native navigation 的新手 应用程序在 iOS 上运行正常 但在启动时很快抛出以下异常 E AndroidRuntime FATAL EXCEPTION main Process c
  • Apache 反向代理到节点 - 连接被拒绝:AH00957

    我正在尝试让一个全新的基于云的服务器与默认版本的 20 04 服务器 ubuntu 一起使用 apache 和节点 节点服务器似乎正在运行 没有报告 4006 端口已打开的问题 但我相信我的 apache 配置不是 该请求将挂起很长一段时间
  • Flash Builder 中的输出文件名

    我是第一次尝试 Flash Builder 但我陷入了一个简单的任务 如何更改输出文件名 默认情况下 Flash Builder 为 SWF 提供与入口点类相同的名称 但我找不到任何地方可以更改它 Anybody 只需在编译和构建时更改主应
  • 在 Java 线程中模拟竞争条件的代码

    我是 Java 多线程新手 我正在学习竞争条件的概念 基于Oracle文档 http docs oracle com javase tutorial essential concurrency interfere html 我创建了一个示例
  • 使用 mapstruct 将 null 设置为 target

    我正在使用 mapstruct 我想知道是否有任何方法可以为某些目标属性设置 null 值 例如 public class MySource private String prop1 private String prop2 public
  • 使用 Openxml 2.0 在 Excel 中获取单元格背景颜色

    我正在尝试获取 Excel 电子表格中单元格的背景颜色 我正在使用 Open XML 2 0 SDK 我可以打开 xlsx 文件并获取单元格值 我获取背景颜色的代码如下 public BackgroundColor GetCellBackC
  • 设置 Gradle 缓存目录?

    是否可以设置 Gradle 缓存目录 而无需设置 GRADLE USER HOME 环境变量 我希望 Gradle 缓存与我的代码存在于同一工作区中 但这似乎只有通过围绕 Gradle 的 bash 脚本才能实现 为了澄清起见 我正在讨论包
  • Svc 处理程序到 SMC 调用

    如何用C编写svc处理程序来调用SMC 监视模式 指令以切换到arm cortex a9的监视模式 即从管理模式到监视模式需要在 svc 处理程序中完成哪些操作 如何在 C 中编写相同的内容 详细的答案值得赞赏 示例可以在 Linux 源代
  • 在 Python 中初始化 2D 列表:如何对每一行进行深拷贝?

    假设我想初始化一个全为 0 的 2D Python 列表 我会这样做 test 0 0 10 10 然后我开始修改第一个列表中的值 test 0 0 1 0 但这会由于某种原因影响所有列表的第一项 print test 1 0 0 0 0
  • 检测文本溢出已起作用并添加包含全文的工具提示

    我有一个包含电子邮件地址的简单跨度 span email protected span 在我的 CSS 中 跨度设置为固定宽度并带有省略号溢出 email display inline block width 100px overflow
  • maven支持kapt吗?

    是否可以在基于 Maven 的项目中运行 kapt kotlin 注释处理 如果是 我如何将 kapt 集成到 Maven 构建系统中 自 Kotlin 1 1 2 起 现在支持 Gradle 和 Maven 来运行 KAPT 插件 这记录
  • 无法通过引用传递参数 2 - uuid PDO

    我正在尝试插入UUID 和我的INSERT query handle gt beginTransaction Define query query INSERT INTO users users uuid type id VALUES uu
  • if-else-if 阶梯的两个部分的条件语句均为 true

    如果你有这样的代码 if A gt X B gt Y Action1 else if A gt X B gt Y Action2 With A gt X and B gt Y 将两个部分if else if梯子被执行 我正在处理存在此问题的
  • 多彩多姿的占位符文本

    我需要创建一个具有彩色占位符文本的 HTML 文本输入元素 所有文本都应为灰色 但结束星号应为红色 如下所示 在我看来 这是一项看似简单的任务 但实际上要复杂得多 因为浏览器限制了我们设置本机输入元素样式的能力 我听说有人使用 CSS 来覆
  • 什么是应用程序之间的本机消息传递以及它如何工作?

    Chrome 开发者文档提到了一个叫做Native Messaging直接从 Chrome 扩展程序或应用程序与其他桌面应用程序进行通信 我如何判断桌面应用程序何时具有此类可用的本机消息传递以及它可以接受哪种类型的通信 有没有办法让应用程序
  • documentdb 模拟器 gatewayservice 在启动时崩溃

    我想了解 documentdb 并安装模拟器 看起来没有错误 但是 启动后我的服务崩溃了 网关服务启动 从标题来看 我猜测这是模拟器的一项重要服务 有趣的是 模拟器似乎继 续加载并尝试打开 https localhost 8081 expl
  • 如何将答案转换为小数点后两位

    这是我的代码 我想要的输出是txtA Text and txtB Text保留两位小数 Public Class Form1 Private Sub btncalc Click ByVal sender As System Object B
  • 为什么 EF 5.x 对表使用复数名称?

    我对 ORM 框架 例如 Hibernate 甚至 Entity Framework 3 0 有一些经验 默认情况下 这些框架使用表的单数名称 例如 类 User 将映射到表 User 但是 当我使用 Visual Studio 2012