4

私はこのようなコードを持っています:

using (TransactionScope transactionScope = new TransactionScope())
        {
            SetDefaults(products);

            // Map the SizeCollectionIds of the products
            _dataAccess.MapProductSizes(products);

            // Mass update and insert missing parent records to the database
            _dataAccess.UpdateParents(products);

            // Get ids of parent products that were newly inserted
            _dataAccess.PopulateParentProductByParentSku(products);

            // Insert children into database
            _dataAccess.InsertProducts(products);

            // Insert the UPCs into the database
            _dataAccess.InsertUPCs(products);

            // Get Product Ids of newly inserted records
            _dataAccess.PopulateProductIds(products);

            // Get just the parent products to insert the brands
            List<ParentProduct> parents = (from prod in products
                                           select prod.ParentProduct).Distinct().ToList();

            // Insert ParentProductBrand record
            _dataAccess.InsertParentProductBrands(parents);

            // Insert the custom attribute records
            _dataAccess.InsertProductCustomAttributes(products);

            transactionScope.Complete();
        }

私が意図しているのは、トランザクションスコープで呼び出されたメソッドのどこかでエラーが発生した場合、トランザクションがロールバックされることですが、いくつかのテストの後、そうではないようで、私のデータは中途半端に終わってしまいます. 足りないものはありますか?これを機能させるには、メソッド内のデータ アクセス呼び出しを独自の TransactionScopes でラップする必要がありますか?

4

1 に答える 1

0

DataAccess レイヤーで、データベース接続の複数のインスタンスが作成されているようです。データベース接続を DataAccess クラス コンストラクターでインスタンス化し、それを DataAccess メソッド全体で使用してみてください。このブログ投稿を読むことをお勧めします

于 2012-06-21T01:37:26.327 に答える