1

2番目の'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()に到達しなかった場合、バックグラウンドトランザクションがロールバックされます。

複数のdbコンテキストで機能するソリューションについては、この回答を参照してください。

于 2012-05-15T14:51:55.860 に答える