在EF dbcontext中一次更新多个表

时间:2018-03-16 07:44:03

标签: c# entity-framework asp.net-core-1.1

我没有在EF示例中遇到过任何问题,但是如下所示一次更新多个表是安全的

using(var db = new MyDbContext(opts))
{
  var record = db.Record.FirstOrDefault(x => x.Id == id);

  if(record == null) return;

  record.FieldN = ...

  db.Update(record);

  db.Other.RemoveRange(db.Other.Where(x => x.EntityId == id));

 db.SaveChanges();
}

2 个答案:

答案 0 :(得分:1)

是的,这是安全的。

db.SaveChanges()将在原子事务中执行所有UPDATE / INSERT / DELETE查询。它将使用当前事务或创建一个新事务。

答案 1 :(得分:0)

是的,但有时EF会按错误的顺序执行您所要求的内容并且会爆炸,例如删除其中一个依赖于另一个的2件事。

解决方案是通过多次调用SaveChangesAsync()来分隔它们(你应该使用它而不是SaveChanges)。