Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 23237|Отговор: 1

[Източник] Масово подаване и обработка на транзакции в Entity Framework

[Копирай линк]
Публикувано в 8.04.2017 г. 22:10:01 ч. | | |

Използването на SaveChanges() в Entity Framework е много често, а извикването на SaveChanges() след една промяна или изтриване на данни връща броя на записите за въздействие.

За да използвате пакетна модификация или изтриване на данни, ви е необходим методът SaveChanges(false)+AcceptAllChanges().



SaveChanges(false) е просто известие, че EF трябва да извърши операция в базата данни, която е чакаща в паметта и може да бъде отменена, когато е необходимо, например AcceptAllChange() комитирането е наистина успешно, а EF ще отмени операцията SaveChanges(false).



Когато се работи с разпределени транзакционни операции, е необходимо да се използва TransactionScope за обработка, и често ще пишем така:


Но писането по този начин е рисковано, невярно
Например, контекст1. SaveChanges() успя, контекст2. SaveChanges() е проблематичен, ние сме в обхвата. Complete() ще приключи, когато транзакцията бъде засечена и Context1 е успешно изпълнен

(В моята практика горното всъщност може да се върне обратно нормално, ако има контекст1. SaveChanges() успя, контекст2. SaveChanges() е проблематичен, нито един няма да бъде изпълнен успешно!
Позовавай се на пространството за имена System.Transaction в проекта си. Дефинирането на TransactionScope при използване е еквивалентно на дефиниране на обхват на неща, т.е. обхватът на тази транзакция е в рамките на използването. В обхвата на използване, ако няма обхват. Завършете командата, след което обхватът автоматично ще върне всички операции при унищожение. )

Това може да не отговаря непременно на нашите нужди. Ако трябва context1 и context2 да се изпълняват успешно едновременно или нито един не успее, трябва да направим малки корекции в кода, като например да използваме следния код:



Използваме SaveChanges(false), за да изпратим необходимите команди за операции с база данни първо към базата данни, което означава, че контекст 1 и context2 всъщност не са се променили – ако транзакцията бъде прекратена и автоматично върната назад, нито една от промените не е реално записана в базата данни, така че може успешно да бъде върната назад.




Предишен:EF6 използва Database.BeginTransaction за управление на транзакциите
Следващ:Уроци за разработка и използване на серията EF ORM
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com