【问题标题】:Error Entities may have been modified or deleted since entities were loaded加载实体后,错误实体可能已被修改或删除
【发布时间】:2016-12-03 06:03:49
【问题描述】:

我保存了超过 50000 条记录,这是一个很长的代码,所以我无法在这里复制。但总而言之,我收到以下错误,我也没有在本地收到此错误,但在现场,并非每次都收到此错误。我无法追踪错误的确切行:-

错误:-

InOutImport POST 错误消息中的错误:存储更新、插入或删除语句影响了意外的行数 (0)。 自加载实体后,实体可能已被修改或删除。 刷新 ObjectStateManager 条目。

堆栈跟踪:-

在 System.Data.Entity.Internal.InternalContext.SaveChanges()

我该如何解决这个错误?

【问题讨论】:

  • 错误信息看起来很清楚。假设您从数据库中获得了 50000 条记录,然后更新它们并调用 SaveChanges。执行生成的 UPDATE 语句并返回受影响的行数。现在事实证明,受影响的行数少于 50000,这意味着,例如,在您从数据库中获取行并更新它们之前,某些行已被删除。因此,如果不引发此错误,您的某些更新将会丢失。
  • 这是一个很长的代码所以无论如何你可能在一个代码中做的太多了。尝试对其进行模块化,这样您就可以跟踪何时发生的事情,并且能够在此处显示相关部分。没有代码,这是无法回答的。除了例外情况,我们无法告诉您更多信息。

标签: c# entity-framework


【解决方案1】:

您遇到了DbUpdateConcurrencyException。这意味着您的实体可能有一个ROWVERSION,该实体框架用于乐观并发。当您的数据被持久化到数据库时,EF 会检查您的数据在您从数据库中检索到它们后是否发生了变化。这是可能的,因为您的实体附带了ROWVERSION

对于这个问题没有万能的解决方案。你必须如何解决它,取决于你的具体情况。检查this MSDN article 以了解您解决此问题的选项。

您可能需要做的是检查 DbUpdateConcurrencyException.Entries 属性以查看 50000 个实体中的哪些实体存在并发问题。

【讨论】:

    猜你喜欢
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多