0

Code-First Entity Framework では、トランザクションの動作を変更して、すべての変更を破棄せず、代わりにすべての変更を障害点まで保持する方法はありますか?

例えば:

foreach {var objectToSave in ArrayOfEntityObjects)
{
     MyContext.Insert(objectToSave);
}
try
{
     MyContext.SaveChanges();
}
catch (Exception x)
{
    //handling code
}

上記の例では、配列が 100 個のオブジェクトの配列であり、アイテム 50 でエラーが発生したと仮定すると、成功したものを少なくとも失敗するまで保持したいと考えています。これを行うために foreach ループの各反復中に MyContext.SaveChanges() コマンドを実行していることは知っていますが、1 回のコミットでデータベースにコミットすることでパフォーマンスを向上させたいと考えています (私たちの理解では、EF はすべてのコマンドを一度に送信します)。トランザクションの場合、単一の接続を介して、1 回の往復のみを使用します)。

4

1 に答える 1

0

いいえ、これを自動的に行う方法はありません。EF は、すべての変更を 1 つのトランザクションでコミットします。つまり、すべてかゼロかということです。

この動作が必要な場合は、レコードを追加するたびに変更を保存する必要があります。

その理由は、EF がデータ内の "トランザクション" を構成するものを認識していないためです。1 つの行である場合もあれば、複数のテーブルの複数の行である場合もあります。EF は、トランザクションの要件が何であるかを理解しようとさえしません。必要に応じて手動で行う必要があります。

于 2013-09-24T00:42:59.587 に答える