Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 23237|Răspunde: 1

[Sursă] Trimiterea în masă și procesarea tranzacțiilor în cadrul Entity Framework

[Copiază linkul]
Postat pe 08.04.2017 22:10:01 | | |

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.




Precedent:EF6 folosește Database.BeginTransaction pentru a gestiona tranzacțiile
Următor:Seria de dezvoltare și utilizare EF ORM
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com