1

我想知道保存多个对象的最佳方法是什么,如果第二个'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() 保存所有更改或回滚?

4

1 回答 1

1

您应该能够使用事务范围来做到这一点:

using (var ts = new TransactionScope()) {
    repository.Insert(product1);
    repository.Insert(product2);
    repository.Insert(product3);
    DB.SaveChanges();
    ts.Complete();
}

如果在此序列中出现任何故障,并且调用ts.Complete()未到达,则后台事务将回滚。

有关适用于多个数据库上下文的解决方案,请参阅此答案

于 2012-05-15T14:51:55.860 回答