Използването на 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 всъщност не са се променили – ако транзакцията бъде прекратена и автоматично върната назад, нито една от промените не е реално записана в базата данни, така че може успешно да бъде върната назад.
|