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.
|