TransactionScope через несколько методов не является кислотой?


У меня есть такой код:

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();
        }

Я имею в виду, что если где-либо в методах, вызываемых в области транзакций, возникает ошибка, то транзакция откатывается, но после некоторого тестирования кажется, что это не так, и мои данные заканчиваются наполовину испеченными. Может быть, я чего-то не понимаю? Должен ли я обернуть вызовы доступа к данным в самих методах в их собственных транзакционных областях, чтобы заставить это работать?

1 4

1 ответ:

Похоже, что в слое DataAccess создается несколько экземпляров подключений к базе данных. Попробуйте создать экземпляр подключения к базе данных в конструкторе класса DataAccess и использовать его в методах DataAccess. Возможно, вы захотите прочитать этот пост в блоге