2

ストアド プロシージャへの呼び出しが異なる次のコードがあります。

私の問題は、これをトランザクションに入れたいということです。そのため、DB メソッドの 1 つが失敗すると、保留中の変更が自動的にロールバックされます。

Stackoverflow/Microsoft のページで、SubmitChanges がこれらをトランザクションにラップするという記事をいくつか読みました。

問題は、spClearTablesForReplication メソッドがテーブルをクリアし、後でコードが意図的に (テストのために) 失敗し、すべてのテーブルが空になる (ロールバックされない) ことです。

XalSqlDataContext db = new XalSqlDataContext();
db.spClearTablesForReplication();
db.spUpdateStockItemGroup(ConvertToXElement(typeof(List<StockItemGroup>),    stockItemGroups));
db.spUpdateStockItemSubGroup(ConvertToXElement(typeof(List<StockItemSubGroup>),    stockItemSubGroups));

db.SubmitChanges();

これに関する手がかり/解決策。

4

1 に答える 1

7

コードをTransactionScopeusing ブロックでラップすると、 を呼び出すポイントに到達しない限り、ロールバックされますtransactionScope.Complete()

例:

using (TransactionScope transactionScope = new TransactionScope())
{
    //code here
    transactionScope.Complete();
}
于 2013-02-15T07:33:22.697 に答える