Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 23237|Vastaus: 1

[Lähde] Massalähetys ja transaktioiden käsittely Entity Frameworkissa

[Kopioi linkki]
Julkaistu 8.4.2017 22.10.01 | | |

SaveChanges():n käyttö Entity Frameworkissa on hyvin yleistä, ja SaveChanges():n kutsuminen yhden datan muutoksen tai poistamisen jälkeen palauttaa vaikutustietueiden määrän.

Erämuokkauksen tai eräpoiston käyttöön tarvitaan SaveChanges(false)+AcceptAllChanges() -menetelmä.



SaveChanges(false) on vain ilmoitus siitä, että EF:n täytyy suorittaa tietokannassa operaatio, joka odottaa muistia ja voidaan tarvittaessa peruuttaa, kuten AcceptAllChange()-sitoutuminen onnistuu todella hyvin, ja EF kumoaa SaveChanges(false) -toiminnon.



Kun käsitellään hajautettuja transaktiotoimintoja, on tarpeen käyttää TransactionScopea niiden käsittelyyn, ja monesti kirjoitamme näin:


Mutta tällainen kirjoittaminen on riskialtista, valheellista
Esimerkiksi konteksti 1. SaveChanges() onnistui, konteksti2. SaveChanges() on ongelmallinen, olemme laajuudessa. Complete() päättyy, kun transaktio on tehty ja Context1 on onnistuneesti suoritettu

(Omassa käytännössäni yllä oleva voidaan itse asiassa peruuttaa normaalisti, jos kontekstissa1. SaveChanges() onnistui, konteksti2. SaveChanges() on ongelmallinen, kumpaakaan ei suoriteta onnistuneesti!
Viittaa projektisi System.Transaction-nimiavaruuden käyttämiseen. TransactionScope-määrittely käyttää on yhtä kuin määritellä asioiden laajuus, eli transaktion laajuus on käytössä. Käyttöskoopissa, jos laajuutta ei ole. Complete()-komento, jolloin tähtäin palauttaa automaattisesti kaikki toiminnot, kun se tuhoutuu. )

Tämä ei välttämättä vastaa tarpeitamme. Jos tarvitsemme context1:n ja context2:n suoritettavan onnistuneesti samanaikaisesti tai kumpikaan ei onnistu, meidän täytyy tehdä pieniä muutoksia koodiin, kuten käyttää seuraavaa koodia:



Käytämme SaveChanges(false) lähettääksemme tarvittavat tietokantaoperaatiokomennot ensin tietokantaan, mikä tarkoittaa, että context1 ja context2 eivät ole oikeastaan muuttuneet; jos transaktio lopetetaan ja palautetaan automaattisesti, kumpaakaan muutosta ei oikeastaan sitoudu tietokantaan, joten se voidaan palauttaa onnistuneesti takaisin.




Edellinen:EF6 käyttää Database.BeginTransaction -toimintoa transaktioiden hallintaan
Seuraava:EF ORM -kehitys- ja käyttösarjan tutoriaalit
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com