Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 23237|Jawab: 1

[Sumber] Pengiriman massal dan pemrosesan transaksi di Entity Framework

[Salin tautan]
Diposting pada 08/04/2017 22.10.01 | | |

Penggunaan SaveChanges() di Entity Framework sangat sering, dan memanggil SaveChanges() setelah satu modifikasi atau penghapusan data mengembalikan jumlah rekaman dampak.

Untuk menggunakan modifikasi batch atau penghapusan batch data, Anda memerlukan metode SaveChanges(false)+AcceptAllChanges().



SaveChanges(false) hanyalah pemberitahuan bahwa EF perlu melakukan operasi pada database, yang tertunda dalam memori dan dapat dibatalkan bila diperlukan, seperti AcceptAllChange() melakukan commit benar-benar berhasil, dan EF akan membatalkan operasi SaveChanges(false).



Saat berhadapan dengan operasi transaksi terdistribusi, perlu menggunakan TransactionScope untuk menanganinya, dan berkali-kali kita akan menulis seperti ini:


Tapi menulis seperti ini berisiko, salah
Misalnya, konteks1. SaveChanges() berhasil, context2. SaveChanges() bermasalah, kita berada dalam cakupan. Complete() akan berakhir saat transaksi dilakukan, dan Context1 telah berhasil dieksekusi

(Dalam praktik saya, hal di atas sebenarnya dapat diputar kembali secara normal, jika konteks1. SaveChanges() berhasil, context2. SaveChanges() bermasalah, tidak akan berhasil dieksekusi!
Referensikan namespace menggunakan System.Transaction dalam proyek Anda. Mendefinisikan TransactionScope dalam penggunaan setara dengan mendefinisikan cakupan sesuatu, yaitu, ruang lingkup transaksi ini dapat digunakan. Dalam cakupan penggunaan, jika tidak ada cakupan. Complete(), maka cakupan akan secara otomatis mengembalikan semua operasi saat dihancurkan. )

Ini mungkin belum tentu memenuhi kebutuhan kita. Jika kita membutuhkan context1 dan context2 untuk berhasil dieksekusi pada saat yang sama, atau tidak ada yang berhasil, kita perlu membuat penyesuaian kecil pada kode, seperti menggunakan kode berikut:



Kami menggunakan SaveChanges(false) untuk mengirim perintah operasi database yang diperlukan ke database terlebih dahulu, yaitu untuk mencatat bahwa context1 dan context2 tidak benar-benar berubah, jika transaksi dihentikan dan secara otomatis diputar kembali, tidak ada perubahan yang benar-benar dilakukan ke database, sehingga dapat berhasil digulirkan kembali.




Mantan:EF6 menggunakan Database.BeginTransaction untuk mengelola transaksi
Depan:Tutorial Seri Pengembangan dan Penggunaan EF ORM
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com