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.
|