SaveChanges() tiek izmantots Entity Framework ļoti bieži, un, izsaucot SaveChanges() pēc vienas datu modifikācijas vai dzēšanas, tiek atgriezts ietekmes ierakstu skaits.
Lai izmantotu pakešu modifikāciju vai pakešu datu dzēšanu, ir nepieciešama metode SaveChanges(false)+AcceptAllChanges().
SaveChanges(false) ir tikai paziņojums, ka EF ir jāveic operācija datu bāzē, kas gaida atmiņā un var tikt atsaukta, ja nepieciešams, piemēram, AcceptAllChange() commit ir patiesi veiksmīga, un EF atcels SaveChanges(false) darbību.
Nodarbojoties ar sadalītām darījumu operācijām, ir nepieciešams izmantot TransactionScope, lai to apstrādātu, un daudzas reizes mēs rakstīsim šādi:
Bet rakstīt šādi ir riskanti, nepatiesi Piemēram, konteksts1. SaveChanges() izdevās, konteksts2. SaveChanges() ir problemātisks, mēs esam tvērumā. Complete() tiks pārtraukts, kad transakcija tiks veikta un Context1 būs veiksmīgi izpildīts
(Manā praksē iepriekš minēto faktiski var atgriezt normāli, ja konteksts1. SaveChanges() izdevās, konteksts2. SaveChanges() ir problemātisks, neviens no tiem netiks veiksmīgi izpildīts! Atsaucieties uz System.Transaction nosaukumvietu savā projektā. Darījuma darbības jomas definēšana lietošanā ir līdzvērtīga lietu apjoma definēšanai, t.i., šī darījuma darbības joma ir izmantojama. Izmantošanas tvērumā, ja nav tvēruma. Complete() komanda, tad tvērums automātiski atgriezīs visas darbības, kad tas tiks iznīcināts. ) Tas ne vienmēr atbilst mūsu vajadzībām. Ja mums ir nepieciešams, lai context1 un context2 tiktu veiksmīgi izpildīti vienlaicīgi, vai neviens no tiem neizdodas, mums ir jāveic nelielas korekcijas kodā, piemēram, izmantojot šādu kodu:
Mēs izmantojam SaveChanges(false), lai vispirms nosūtītu nepieciešamās datu bāzes operācijas komandas uz datu bāzi, kas nozīmē, ka context1 un context2 nav īsti mainījušies, ja darījums tiek pārtraukts un automātiski atcelts, neviena no izmaiņām faktiski nav saistīta ar datu bāzi, tāpēc to var veiksmīgi atcelt.
|