0

Entity Framework (4.3.1.0) を使用してプロジェクトに取り組んでいます。コードをトランザクションとして機能させる方法を見つけようとしていますが、トランザクションが失敗した後にモデルが更新されないようです。

披露させて:

using (TransactionScope trans = new TransactionScope())
{
    _database.Units.Add(new Unit{ ... });
    var a = false;
    if (a)
    {
        trans.Complete();
        Refresh();
    }
}

Refresh();

私が経験したことは、トランザクションスコープが終了した後、以前の状態にロールバックしないということです。refresh メソッドを実行すると、Units 内のすべての項目を繰り返し処理し、値を ObservableCollection に挿入して、WPF ウィンドウの画面に表示します。

このメカニズムは、トランザクションが正常に実行されたときに機能しますが、上記のコードを実行すると、新しく追加されたユニットでグリッドが更新されますが、トランザクションの後に Refresh を実行しても消えません。

私はここで根本的に間違ったことをしていると感じています:)

4

1 に答える 1

2

Entity Framework は、メモリ内で追跡されるエンティティのトランザクションをサポートしていません。ObjectContext に表示される「ObjectStateManager」は、トランザクション リソースではありません。TransactionScope は、その中で実行されるデータベース操作 (クエリ、更新) にのみ "適用" され、オブジェクト グラフの操作 (これはあなたが行うことです) などのメモリ内操作には適用されません。

于 2012-06-25T07:33:33.380 に答える