我没有在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();
}
答案 0 :(得分:1)
是的,这是安全的。
db.SaveChanges()
将在原子事务中执行所有UPDATE / INSERT / DELETE查询。它将使用当前事务或创建一个新事务。
答案 1 :(得分:0)
是的,但有时EF会按错误的顺序执行您所要求的内容并且会爆炸,例如删除其中一个依赖于另一个的2件事。
解决方案是通过多次调用SaveChangesAsync()来分隔它们(你应该使用它而不是SaveChanges)。