A SaveChanges() használata az Entity Frameworkben nagyon gyakori, és a SaveChanges() hívása egyetlen adatmódosítás vagy törlés után visszaadja az impact rekordok számát.
A köteges módosításhoz vagy adattörléshez szükséged van a SaveChanges(false)+AcceptAllChanges() módszerre.
A SaveChanges(false) csupán egy értesítés arról, hogy az EF-nek végrehajtania kell egy műveletet az adatbázison, amely memóriában függőben van, és szükség esetén vissza lehet állítani, például az AcceptAllChange() commit valóban sikeres, és az EF visszavonja a SaveChanges(false) műveletét.
Elosztott tranzakciós műveleteknél szükséges a TransactionScope segítségével kezelni, és sokszor így írunk:
De az ilyen írás kockázatos, hamis Például a kontextus1. SaveChanges() sikerült, context2. A SaveChanges() problémás, mi a hatókörben vagyunk. Complete() akkor szűnik meg, amikor a tranzakció elkötelezett és a Context1 sikeresen végrehajtható
(Az én praxisomban a fentiek valójában normálisan vissza is lehet fordítani, ha kontextusban vagyunk 1. SaveChanges() sikerült, context2. A SaveChanges() problémás, egyik sem sikeresen hajtható el! Hivatkozz a projektedben a System.Transaction névteret használva. TransactionScope meghatározása használatban egyenértékű egy dolgok körének meghatározásával, vagyis ennek a tranzakciónak a hatóköre a használaton belül van. A használó távcsőben, ha nincs scope-. Complete() parancsot ad, akkor a távcső automatikusan visszafordítja az összes műveletet, ha megsemmisül. ) Ez nem feltétlenül felel meg az igényeinknek. Ha a context1 és a context2 egyszerre sikeresen végrehajtható, vagy egyik sem sikerül, akkor apró módosításokat kell végeznünk a kódon, például a következő kódot kell használni:
A SaveChanges(false) segítségével először elküldjük a szükséges adatbázis-műveleti parancsokat az adatbázisnak, ami azt jelenti, hogy a context1 és a context2 valójában nem változott, ha a tranzakciót leállítják és automatikusan visszafordítják, egyik változás sem köteleződik el az adatbázisban, így sikeresen vissza lehet állítani.
|