Utilizarea SaveChanges() în Entity Framework este foarte frecventă, iar apelarea SaveChanges() după o singură modificare sau ștergere a datelor returnează numărul de înregistrări de impact.
Pentru a folosi modificarea în loturi sau ștergerea în loturi a datelor, ai nevoie de metoda SaveChanges(false)+AcceptAllChanges().
SaveChanges(false) este doar o notificare că EF trebuie să efectueze o operație pe baza de date, care este în așteptare în memorie și poate fi anulată când este necesar, cum ar fi că AcceptAllChange() este cu adevărat reușită, iar EF va anula operațiunea SaveChanges(false).
Când lucrăm cu operațiuni de tranzacții distribuite, este necesar să folosim TransactionScope pentru a le gestiona, iar de multe ori vom scrie astfel:
Dar scrisul de genul acesta este riscant, fals De exemplu, context1. SaveChanges() a reușit, context2. SaveChanges() este problematic, suntem în domeniu. Complete() se va termina când tranzacția este confirmată, iar Context1 a fost executat cu succes
(În practica mea, cele de mai sus pot fi de fapt anulate normal, dacă contextul este 1. SaveChanges() a reușit, context2. SaveChanges() este problematic, niciuna nu va fi executată cu succes! Referiționează-te la namespace-ul Using System.Transaction din proiectul tău. Definirea unui TransactionScope în utilizarea este echivalentă cu definirea unui scop de lucruri, adică sfera acestei tranzacții este în interiorul utilizării. În domeniul de utilizare, dacă nu există un scop. Complete(), apoi osciloscopul va anula automat toate operațiunile când este distrus. ) Acest lucru poate să nu ne satisfacă neapărat nevoile. Dacă avem nevoie ca context1 și context2 să fie executate cu succes simultan, sau dacă niciunul nu reușește, trebuie să facem mici ajustări la cod, cum ar fi utilizarea următorului cod:
Folosim SaveChanges(false) pentru a trimite comenzile necesare de operare a bazei de date mai întâi, adică să notăm că context1 și context2 nu s-au schimbat cu adevărat, dacă tranzacția este terminată și anulată automat, niciuna dintre modificări nu este efectiv angajată în baza de date, deci poate fi anulată cu succes.
|