Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 23237|Risposta: 1

[Fonte] Invio in massa e elaborazione delle transazioni nell'Entity Framework

[Copiato link]
Pubblicato su 08/04/2017 22:10:01 | | |

L'uso di SaveChanges() nell'Entity Framework è molto frequente, e chiamare SaveChanges() dopo una singola modifica o cancellazione dei dati restituisce il numero di record di impatto.

Per usare la modifica batch o la cancellazione batch dei dati, è necessario il metodo SaveChanges(false)+AcceptAllChanges().



SaveChanges(false) è semplicemente una notifica che EF deve eseguire un'operazione sul database, che è in sospeso in memoria e può essere annullata quando necessario, ad esempio il commit di AcceptAllChange() è davvero riuscito, e EF annullerà l'operazione di SaveChanges(false).



Quando si tratta di operazioni di transazione distribuite, è necessario utilizzare TransactionScope per gestirle, e spesso scriviamo così:


Ma scrivere così è rischioso, falso
Per esempio, contesto1. SaveChanges() riuscito, contest2. SaveChanges() è problematico, siamo nel campo di controllo. Complete() terminerà quando la transazione viene effettuata e Context1 è stato eseguito con successo

(Nella mia pratica, quanto sopra può effettivamente essere riportato normalmente, se contesto1. SaveChanges() riuscito, contest2. SaveChanges() è problematico, nessuno dei due verrà eseguito con successo!
Fai riferimento al namespace Using System.Transaction nel tuo progetto. Definire un TransactionScope in using equivale a definire un ambito di cose, cioè l'ambito di questa transazione rientra nell'uso. Nell'ambito di utilizzo, se non c'è ambito. Complete (comando), poi il telescopio annullerà automaticamente tutte le operazioni quando distrutto. )

Questo potrebbe non necessariamente soddisfare le nostre esigenze. Se abbiamo bisogno che context1 e context2 vengano eseguiti con successo contemporaneamente, o nessuno dei due ha successo, dobbiamo apportare piccoli aggiustamenti al codice, come l'uso del seguente codice:



Usiamo SaveChanges(false) per inviare prima i comandi necessari di operazione al database, ovvero per notare che context1 e context2 non sono realmente cambiati; se la transazione viene terminata e automaticamente annullata, nessuna delle due modifiche viene effettivamente validata nel database, quindi può essere annullata con successo.




Precedente:EF6 utilizza Database.BeginTransaction per gestire le transazioni
Prossimo:Tutorial della serie EF ORM Development and Use
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com