在一次提交中保存来自不同类的多个对象

时间:2012-05-15 14:48:23

标签: entity-framework repository-pattern

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

1 个答案:

答案 0 :(得分:1)

您应该可以使用事务范围执行此操作:

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

如果此序列中的任何内容失败,并且未达到调用ts.Complete(),则回滚后台事务。

对于跨多个数据库上下文有效的解决方案,请参阅this answer