【问题标题】:Store update insert or delete statement affected an unexpected number of rows (0)存储更新插入或删除语句影响了意外的行数 (0)
【发布时间】:2014-07-26 06:53:05
【问题描述】:

我正在使用下面显示的代码来更新实体模型。但我得到这个错误:

存储更新、插入或删除语句影响了意外的行数 (0)

而且这个错误的原因也是已知的,这是因为该属性在数据库中不存在。为此我发现只有一个选择:首先检查实体是否存在,然后更新它。

但是,由于我一次更新 10,000 多行,因此每次在数据库中检查此属性是否存在将非常耗时。

有没有其他方法可以解决这个问题?

谢谢。

foreach (Property item in listProperties)
{
    db.Properties.Attach(item);
    db.Entry(item).Property(x => x.pState).IsModified = true;
}

db.SaveChanges();

【问题讨论】:

  • 你不能检查主键属性的值吗?比如,当Id == 0 是一个新的Property

标签: entity-framework


【解决方案1】:

你用错了。如果您想在不检索实体的情况下进行更新,只需通过提供 id 来更改更新实体的状态。

foreach (Property item in listProperties)
{
    db.Entry(item).State = EntityState.Modified;
}

db.SaveChanges();

将现有但已修改的实体附加到上下文

如果您知道某个实体已存在于数据库中,但 可能已经进行了哪些更改,那么您可以告诉上下文 附加实体并将其状态设置为已修改。

当您将状态更改为已修改实体的所有属性时 将被标记为已修改,所有属性值将被发送到 调用 SaveChanges 时的数据库。

Source

【讨论】:

    【解决方案2】:

    我收到此错误只需将 EF 版本从 5 更新到 6 即可解决问题。

    【讨论】:

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