【问题标题】:Entity Framework - "An error occurred while updating the entries. See the inner exception for details" [duplicate]实体框架-“更新条目时发生错误。有关详细信息,请参阅内部异常”[重复]
【发布时间】:2014-06-13 22:59:37
【问题描述】:

我有问题,我刚开始学习 EF Model First 并且我停留在一个点上一段时间。我收到了这样的错误:

“更新条目时发生错误。有关详细信息,请参阅内部异常”

我在图表上创建了一个简单的模型,生成了数据库并用 C# 编写了简单的代码,只在表中添加了一行,但错误一直出现。

我发布带有图表/生成的 DLL/简单主/和错误抛出的屏幕截图

更大尺寸的链接:http://i.imgur.com/bKGc4wv.png

【问题讨论】:

  • 内部错误是什么?
  • See Inner Exception for details 意思是它所说的。您正在调用一个不存在的对象dbo.Pupils。您是否让 EF 为您的表格复数化?如果是这样,EF 表可能会像“Pupilss”这样奇怪。通常数据库表是单数,EF是复数。而且前面有dbo 也很奇怪。
  • 您的连接字符串是否正确设置为指向该数据库?将类映射到数据库的代码在哪里?请发布代码,并保存屏幕截图以获取有关问题所在的视觉提示。只需复制和粘贴您的异常详细信息即可,而不是该窗口的屏幕截图。
  • 只是另一种解决方案:对我来说,这是因为字符串的长度大于 DB 列的 varchar 长度。

标签: c# entity-framework ef-model-first


【解决方案1】:

转动Pluralization On。问题是您的模型对象使用单数名称 (Pupil) 约定,而在您的数据库中,您使用复数名称 Pupilss

更新

这个post 展示了如何打开或关闭它。 该帖子的一些相关摘录:

打开和关闭复数形式

  • 在“工具”菜单上,单击“选项”。

  • 在“选项”对话框中,展开“数据库工具”。 注意:如果数据库工具节点不可见,请选择显示所有设置。

  • 单击 O/R 设计器。

  • 将名称的多元化设置为 Enabled = False 以设置 O/R 设计器,使其不会更改类名称。

  • 将名称复数设置为 Enabled = True 以将复数规则应用于添加到 O/R 设计器的对象的类名称。

更新 2

但请注意,您应该避免使用复数名称。 你可以阅读here 怎么做(我会在这里引用它,以防链接被破坏)。

(...) 当您使用实体框架代码优先方法时,您是从模型类创建数据库表。通常实体框架将创建具有复数名称的表。这意味着如果你有一个名为 PhoneNumber 的模型类,实体框架将为这个类创建一个名为“PhoneNumbers”的表。如果您希望避免使用复数名称并想要像 Customer 这样的单数名称,您可以这样做 在您的 DBContext 类中,像这样 (...)

覆盖“OnModelCreating”方法

(...) 覆盖此方法将避免创建具有复数名称的表。现在它将创建一个名为“PhoneNumber”的表,而不是“PhoneNumbers”(...)

【讨论】:

  • 我应该在哪里打开它?
  • 不幸的是我启用了复数,所以这不是问题:/
  • @CSharpBeginner 我建议您使用单数名称创建表,然后在您的代码上,也强制使用单数名称,如上图所示。试一试。
【解决方案2】:

这可能是由从 .NET 到 SQL 的数据转换引起的,例如日期时间转换错误。对我来说,这是对日期时间列的空引用。

另外,这不是一个确切的错误消息。您可以在 exception.InnerException.InnerException -> ResultView 处查看确切的错误。

【讨论】:

  • 这是给我的。
  • 寻找InnerException 的有用建议,得到的确切消息为实体名称不匹配。数据库中的表名和定义的实体名称不同
  • “in watch”是什么意思?
  • 啊,Visual Studio 中的 QuickWatch 异常弹出窗口。
【解决方案3】:

查看异常的 Inner Exception 以获得更具体的错误消息。

查看内部异常的一种方法是捕获异常,并在其上放置断点。然后在 Locals 窗口中:选择 Exception 变量 > InnerException > Message

并且/或者只是写到控制台:

    catch (Exception e)
    {
        Console.WriteLine(e.InnerException.Message);
    }

【讨论】:

  • 获取 DbUpdateException 的原因需要的不止这些。
  • 获取“更新条目时发生错误。有关详细信息,请参阅内部异常”的原因。
  • 感谢您向我展示如何查看 InnerException。在我自己的情况下,这让我更接近解决方案。我为此投了赞成票
【解决方案4】:

根据记录,我遇到了这个问题,这对我来说是一个愚蠢的错误。我的问题是数据类型不匹配。 数据库表和C#类中的数据类型应该相同......

【讨论】:

    【解决方案5】:

    我的问题是表的 ID 不是 AUTO_INCREMENT,我试图添加范围。

    【讨论】:

      【解决方案6】:

      我遇到了同样的问题,上述解决方案都没有帮助我。在我的Web Api 2 项目中,我实际上已经更新了我的数据库并在SQL table column. 上放置了一个unique constraint 这实际上是导致问题的原因。在插入之前简单地检查重复的列值可以帮助我解决问题!

      【讨论】:

        【解决方案7】:

        我在 EF 中遇到了关于 SaveChanges() 的同样问题,但在我的情况下,我忘记更新我的 sql 表,然后在我使用迁移后我的问题解决了,所以也许更新你的表会解决问题。

        【讨论】:

          【解决方案8】:

          我遇到了同样的错误:

          "更新条目时出错。请参阅内部异常 详情”

          只需删除并重新创建 *.edmx 文件。它对我有用。错误会消失

          【讨论】:

          • 这不可能是一个解决方案,当且仅当它在你的情况下有效,那么我会说这是一个黑客而不是一个解决方案。
          【解决方案9】:

          我最近遇到了这个问题。 这是发生的,因为用户数据库的权限。 检查用户数据库的权限,可能用户没有权限在数据库上写。

          【讨论】:

            【解决方案10】:

            就我而言..解决了以下步骤:

            有一个列值设置为“更新” - 将其替换为编辑(非 sql 关键字) 其中一个列名中有一个空格(删除了多余的空格或修剪)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-03-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多