SaveChanges() kasutamine Entity Frameworkis on väga sage ning SaveChanges() kutsumine pärast ühte andmete muutmist või kustutamist tagastab mõjukirjete arvu.
Partii muutmise või andmete partiikustutamise kasutamiseks on vaja meetodit SaveChanges(false)+AcceptAllChanges().
SaveChanges(false) on lihtsalt teade, et EF peab andmebaasis operatsiooni tegema, mis on mälus ootel ja vajadusel saab tagasi võtta, näiteks AcceptAllChange() pühendumine on tõeliselt edukas ning EF tühistab SaveChanges(false) toimingu.
Kui tegeleda hajutatud tehinguoperatsioonidega, on vajalik kasutada TransactionScope'i selle haldamiseks ning sageli kirjutame nii:
Aga selline kirjutamine on riskantne, vale Näiteks kontekst1. SaveChanges() õnnestus, kontekst2. SaveChanges() on problemaatiline, me oleme selle ulatuses. Complete() lõpeb siis, kui tehing on tehtud ja Context1 on edukalt täidetud
(Minu praktikas saab ülaltoodu tegelikult normaalselt tagasi pöörata, kui kontekstis1. SaveChanges() õnnestus, kontekst2. SaveChanges() on probleemne, kumbki ei õnnestu edukalt täita! Viita oma projektis kasutatavale System.Transaction nimeruumile. TransactionScope'i defineerimine kasutamises on võrdne asjade ulatuse määratlemisega, st selle tehingu ulatus on kasutamise piires. Kui ulatust pole, siis kasutusulatuses. Complete() käsk, siis sihik keerab automaatselt kõik operatsioonid tagasi, kui hävitatakse. ) See ei pruugi tingimata meie vajadusi täita. Kui vajame, et kontekst1 ja kontekst2 õnnestuksid korraga edukalt või kumbki ei õnnestu, peame tegema väikeseid muudatusi koodis, näiteks kasutades järgmist koodi:
Kasutame SaveChanges(false) vajalike andmebaasi operatsioonikäskude saatmiseks esmalt andmebaasile, mis tähendab, et context1 ja context2 pole tegelikult muutunud; kui tehing lõpetatakse ja automaatselt tagasi keeratakse, ei ole kumbki muudatus tegelikult andmebaasis kinnitatud, seega saab selle edukalt tagasi pöörata.
|