Використання SaveChanges() у Entity Framework є дуже частим, і виклик SaveChanges() після однієї зміни або видалення даних повертає кількість записів впливу.
Щоб використовувати пакетну модифікацію або пакетне видалення даних, потрібен метод SaveChanges(false)+AcceptAllChanges().
SaveChanges(false) — це просто сповіщення про те, що EF потрібно виконати операцію в базі даних, яка перебуває в пам'яті і може бути скасована за потреби, наприклад, якщо AcceptAllChange() фіксація дійсно успішна, і EF скасовує операцію SaveChanges(false).
При роботі з розподіленими транзакціями необхідно використовувати TransactionScope, і часто ми пишемо так:
Але писати так — ризиковано, неправдиво Наприклад, контекст1. SaveChanges() вдалося, context2. SaveChanges() є проблематичним, ми маємо обмеження. Complete() завершиться, коли транзакція буде зафіксована, а Context1 успішно виконано
(У моїй практиці вищезазначене можна відкотити нормально, якщо враховувати контекст1. SaveChanges() вдалося, context2. SaveChanges() проблематичний, жоден із них не буде успішно виконаний! Посилайтеся на простір імен System.Transaction у вашому проєкті. Визначення TransactionScope у використанні еквівалентне визначенню обсягу речей, тобто обсяг цієї транзакції знаходиться в межах використання. У сфері використання, якщо його немає. Виконайте() команду, тоді область автоматично відкотить усі операції після знищення. ) Це може не обов'язково відповідати нашим потребам. Якщо нам потрібно, щоб context1 і context2 успішно виконувалися одночасно, або жоден із них не вдається, потрібно внести невеликі коригування в код, наприклад, використати наступний код:
Ми використовуємо SaveChanges (false) для надсилання необхідних команд операцій бази даних до бази даних, тобто зазначити, що context1 і context2 фактично не змінилися; якщо транзакція завершена і автоматично відкотиться назад, жодна з змін фактично не фіксується в базі даних, тому її можна успішно відкотити.
|