0

汎用 DAO からメソッドを継承するこの特定の DAO があります。例外が見つかった場合に行われたすべての変更をロールバックするために、このコードにトランザクションを追加したいと思います。

        TDAO tDAO = new TDAO();
        TDAO2 tDAO2 = new TDAO2();


        //Get the DAO to delete from the database let's call them dDao and dDao2

        //Start the Transaction
        using (TransactionScope trans = new TransactionScope())
        {
            try
            {
                //Delete all SGC Associated switch
                TDAO2.Delete(dDao);

                //Delete switch
                TDAO.Delete(dDao2);

                //send notification
                base.SendChangeNotification();

                //Commit the Information Completing the Transaction
                trans.Complete();
            }
            catch (UpdateException ex)//SQL exception
            {
                //Log the error
                //Rollback the changes if there is an exception
                throw new Exception(Resources.ErrorMessages.OperationNotPermited);
            }
            catch (Exception ex) //Other exception
            {
                //Log the error
                throw new Exception(Resources.ErrorMessages.UndifenedError);
            }
        }

Visual Studio で、プロジェクトの [参照] アイコンに移動します。右クリック、参照の追加。次に、System.Transactions.dll を検索します。それを選択し、[OK] をクリックします。次に、プロジェクトを再構築してみてください。また、Using System.Transactions; のように、Using ステートメント (C#) または Imports ステートメント (VB) が一番上にあることを確認してください。

変更点はコードにあります。ありがとうございました

4

2 に答える 2

0

You need to complete the transaction otherwise the transaction will be roll back. So, in your code you need to add Transaction.Complete() method, if you don't it will roll back itself.

于 2012-11-06T08:22:20.847 に答える
0

これを解決済みとしてマークしましたが、それでも答えです。

Entity Framework を使用している場合は、トランザクションについて心配する必要はありません。コンテキストは作業単位を管理し、それが 1 つのトランザクションでコミット (またはロールバック) されるようにします。コードに含まれる低レベルのデータ アクセス要素が多すぎます。EF に CRUD アクションを実行させます。

Entity Framework を使用すると、コードのほとんどの部分で永続性を無視できます。私の意見は、DAO パターンは必要ないということです。さらに悪いことに、邪魔になるだけです。最初にデータベース アクションとコンテキスト インスタンスを分離し、次にトランザクション スコープによってすべてをまとめる必要があります。つまり、作業単位を管理しています。DAO ではなく、POCO で作業します。1 つのコンテキスト インスタンスで変更を追跡し、1 回のSaveChanges()呼び出しで保存します。

于 2012-11-06T10:22:32.657 に答える