Структура сущности и объем транзакции
Я говорю, у меня есть следующие три метода:
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
всегда делает все изменения в транзакции.