实体记录未更新

时间:2014-07-15 16:36:51

标签: c# entity-framework-6

我有以下方法:

public static void UpdatePpsTransaction(IEnumerable<PpsTransaction> ppsTransaction)
{
  using (var context = PpsEntities.DefaultConnection())
  {
    foreach (var trans in ppsTransaction)
    {
      context.PpsTransactions.Attach(trans);
    }
    context.SaveChanges();
  }
}

}

我正在删除这些记录,但我最终创建了一个字段IsProcessed,我现在设置为true。现在我正在更新记录而不是删除记录,保留记录。

无论如何,我没有收到任何错误,但它没有更新记录。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您没有告诉EF您已进行任何更改,请尝试在您的上下文中使用Entry方法:

public static void UpdatePpsTransaction(IEnumerable<PpsTransaction> ppsTransaction)
{
  using (var context = PpsEntities.DefaultConnection())
  {
    foreach (var trans in ppsTransaction)
    {
      context.Entry(trans).State = EntityState.Modified;
    }
    context.SaveChanges();
  }
}

这样,实体将以修改后的声明附加到上下文,因此当您致电SaveChanges()时,这些将被保存。

只有当数据库中已存在实体时才会这样做。

答案 1 :(得分:0)

来自msdn:

  

如果您知道某个实体已存在于数据库中但当前不存在   通过上下文跟踪,您可以告诉要跟踪的上下文   在DbSet上使用Attach方法的实体。该实体将在   上下文中状态不变。请注意,不会对其进行任何更改   数据库,如果SaveChanges是   调用时不对附加实体进行任何其他操作。   这是因为实体处于Unchanged状态。

Here是链接