我想知道保存多个对象的最佳方法是什么,如果第二个'obj.Insert()'抛出异常,所有更改都会回滚。
我正在尝试这样的事情:
Product product1 = new Product();
Product product2 = new Product();
Product product3 = new Product();
DbContext DB = new DB();
IProductInsert repository = new ProductInsert(DB);
repository.Insert(product1);
repository.Insert(product2);
repository.Insert(product3);
DB.SaveChanges();
但在我看来,我认为这不正确..
如何使用存储库类中的DB.SaveChanges()保存所有更改或回滚?
答案 0 :(得分:1)
您应该可以使用事务范围执行此操作:
using (var ts = new TransactionScope()) {
repository.Insert(product1);
repository.Insert(product2);
repository.Insert(product3);
DB.SaveChanges();
ts.Complete();
}
如果此序列中的任何内容失败,并且未达到调用ts.Complete()
,则回滚后台事务。
对于跨多个数据库上下文有效的解决方案,请参阅this answer。