Структура сущности и объем транзакции

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

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 ответ

Решение

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

Другие вопросы по тегам