Структура сущности и объем транзакции - PullRequest
2 голосов
/ 15 июня 2011

Я говорю, что у меня есть следующие три метода:

DeleteProduct(int productId);
DeleteProductAttributes(int productId);
DeleteProductManufacturers(int productId);

У меня также есть глобальный (внутри класса) объектный контекст, называющий его _context.Я хочу, чтобы каждый из этих методов работал самостоятельно, так как мне нужно использовать их где-нибудь еще.Однако в методе удаления продукта я хочу иметь возможность использовать область транзакции на случай, если что-то не получится, и у меня останется продукт без атрибутов или производителя.Таким образом, мой метод DeleteProduct в данный момент выглядит примерно так:

public void DeleteProduct(int productId)
{
    if (productId == 0)
        return;
    Product product = GetProductById(productId);
    DeleteProductAttributes(productId);
    DeleteProductManufacturers(productId);
    _context.Products.DeleteObject(product);
}

Кто-нибудь знает, как я могу это сделать, не разрушая структуру, которую я описал выше?

Любая помощь очень ценится.

спасибо

1 Ответ

3 голосов
/ 15 июня 2011

Если все три метода используют один и тот же контекст, сохраненный в поле _context, то они уже находятся в транзакции.Все изменения данных (включая удаление) отмечаются только в контексте и выполняются в базе данных только при вызове SaveChanges.SaveChanges всегда делает все изменения в транзакции.

...