2

一連の操作の 1 つの操作が失敗した場合に、SQL サーバーで前の操作をロールバックする方法に関する特定の投稿は見つかりませんでした。

たとえば、いくつかのデータを取得するためのクエリが1つあり、行を追加するとcontext.saveChanges()、おそらく2番目と3番目の挿入が実行されます。

わかりました、この最後の挿入は失敗したので、db の状態を 3 回の挿入の前の状態に戻したいと思います。

EF4 と SQL Server 2008 R2 + Asp Net MVC 4/C# を使用しています。

それを行う唯一の方法はトランザクションですか?これらの操作は 1 つだけではなく (プログラムによって) 1 つずつ保存されているcontext.saveChange()ため、ロールバックの実行方法がわかりません。

4

2 に答える 2

4

TransactionScope を使用すると、このような「ネストされたトランザクション」を実行できます。

ロジックをラップする

using (var transScope = new TransactionScope())
{

    //add something
    context.SaveChanges();

    //do something else
    context.SaveChanges();

    if (foo == bar) //check that it worked fine
    {
        transScope.Commit();
    }
} 
于 2013-01-31T12:21:06.860 に答える
0

まあ、何もしないでください。SaveChanges は、既に内部的にトランザクションを使用していました。それはアトミックです-変更が保存されるかどうか。

于 2013-01-31T12:06:33.340 に答える