我有以下方法:
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。现在我正在更新记录而不是删除记录,保留记录。
无论如何,我没有收到任何错误,但它没有更新记录。
有什么建议吗?
答案 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是链接