Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 23237|Svar: 1

[Källa] Massinlämning och transaktionshantering i Entity Framework

[Kopiera länk]
Publicerad på 2017-04-08 22:10:01 | | |

Användningen av SaveChanges() i Entity Framework är mycket frekvent, och anrop av SaveChanges() efter en enda ändring eller borttagning av data returnerar antalet påverkade poster.

För att använda batchmodifiering eller batchradering av data behöver du metoden SaveChanges(false)+AcceptAllChanges().



SaveChanges(false) är bara en notis om att EF behöver utföra en operation på databasen, som väntar i minnet och kan ångras vid behov, såsom att AcceptAllChange()-committing verkligen lyckas, och EF kommer att ångra operationen SaveChanges(false).



När man hanterar distribuerade transaktionsoperationer är det nödvändigt att använda TransactionScope för att hantera det, och många gånger skriver vi så här:


Men att skriva så här är riskabelt, falskt
Till exempel, kontext1. SaveChanges() lyckades, kontext2. SaveChanges() är problematiskt, vi är inom räckvidd. Complete() avslutas när transaktionen är genomförd och Context1 har exekverats framgångsrikt

(I min praktik kan ovanstående faktiskt rullas tillbaka normalt, om kontext1. SaveChanges() lyckades, kontext2. SaveChanges() är problematiskt, ingen av dem kommer att köras framgångsrikt!
Referera till det använda System.Transaction-namnrymden i ditt projekt. Att definiera en TransactionScope i att använda är likvärdigt med att definiera en omfattning av saker, dvs. omfattningen av denna transaktion ligger inom användning. I användningsområdet, om det inte finns något område. Complete()-kommandot, då rullar siktet automatiskt tillbaka alla operationer när det förstörs. )

Detta behöver inte nödvändigtvis uppfylla våra behov. Om vi behöver att context1 och context2 körs framgångsrikt samtidigt, eller om ingen lyckas, behöver vi göra små justeringar i koden, till exempel med följande kod:



Vi använder SaveChanges(false) för att först skicka nödvändiga databasoperationskommandon till databasen, vilket innebär att kontext1 och kontext2 egentligen inte har ändrats, om transaktionen avslutas och automatiskt rullas tillbaka så är ingen av ändringarna faktiskt kommitterade i databasen, så den kan rullas tillbaka framgångsrikt.




Föregående:EF6 använder Database.BeginTransaction för att hantera transaktioner
Nästa:EF ORM-utveckling och användningsserier handledningar
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com