Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 23237|Відповідь: 1

[Джерело] Масове подання та обробка транзакцій у Entity Framework

[Копіювати посилання]
Опубліковано 08.04.2017 22:10:01 | | |

Використання 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 фактично не змінилися; якщо транзакція завершена і автоматично відкотиться назад, жодна з змін фактично не фіксується в базі даних, тому її можна успішно відкотити.




Попередній:EF6 використовує Database.BeginTransaction для керування транзакціями
Наступний:Уроки серії розробки та використання EF ORM
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com