Rumah > pembangunan bahagian belakang > C++ > SaveChanges(false) dan AcceptAllChanges() dalam EF: Bilakah Anda Harus Menggunakannya untuk Transaksi Teragih?

SaveChanges(false) dan AcceptAllChanges() dalam EF: Bilakah Anda Harus Menggunakannya untuk Transaksi Teragih?

Patricia Arquette
Lepaskan: 2025-01-25 12:41:12
asal
755 orang telah melayarinya

SaveChanges(false) and AcceptAllChanges() in EF: When Should You Use Them for Distributed Transactions?

Pengurusan Rangka Kerja Entiti: SaveChanges (False) dan ReseptAllChanges () dan Transactionscope Compare

Dalam Rangka Kerja Entiti (EF), pengurusan transaksi biasanya hanya memerlukan operasi manual paling sedikit. Dengan lulus palsu kepada SaveChanges (), rangka kerja itu akan ditubuhkan atau mengambil bahagian dalam urus niaga. Selepas pelaksanaan yang berjaya, AcceptallChanges () akan mengemukakan dan menyelesaikan perubahan dalam transaksi.

Walau bagaimanapun, beberapa senario mungkin mendapat manfaat daripada menggunakan saveChanges (false) dan reseptAllChanges () pada masa yang sama. Kelebihan utama mereka ialah ia melibatkan urusan yang diedarkan yang melibatkan pelbagai konteks.

pertimbangkan kod kod berikut:

Jika Context1.SaveChanges () gagal berjaya melaksanakan, Context2.SaveChanges () gagal, keseluruhan transaksi yang diedarkan akan digantung. Malangnya, EF telah membuang perubahan dalam Context1 dan tidak dapat pulih atau mencatatkan kesilapan dengan berkesan.
<code>using (TransactionScope scope = new TransactionScope())
{
    // 对 context1 执行操作
    // 对 context2 执行操作

    // 保存并丢弃更改
    context1.SaveChanges();

    // 保存并丢弃更改
    context2.SaveChanges();

    // 如果执行到这里,则一切看起来都很正常。
    scope.Complete();
}</code>
Salin selepas log masuk

Untuk menyelesaikan masalah ini, sila gunakan kaedah yang diubah suai berikut:

Pengubahsuaian ini hanya membolehkan kedua -dua konteks untuk menyerahkan perubahan mereka hanya selepas urus niaga berjaya. Jika keabnormalan berlaku, perubahan akan disimpan dalam objekStateManager di atas dan di bawah untuk pemprosesan selanjutnya, seperti cuba semula atau rekod log.
<code>using (TransactionScope scope = new TransactionScope())
{
    // 对 context1 执行操作
    // 对 context2 执行操作

    // 保存更改,但不要立即丢弃
    context1.SaveChanges(false);

    // 保存更改,但不要立即丢弃
    context2.SaveChanges(false);

    // 如果执行到这里,则一切看起来都很正常。
    scope.Complete();
    context1.AcceptAllChanges();
    context2.AcceptAllChanges();
}</code>
Salin selepas log masuk
Oleh itu, savechaanges (palsu) dan reseptallChanges () memberikan kelonggaran yang lebih besar dalam senario transaksi yang diedarkan, yang boleh membaiki dan merekodkan log apabila rosak.

Atas ialah kandungan terperinci SaveChanges(false) dan AcceptAllChanges() dalam EF: Bilakah Anda Harus Menggunakannya untuk Transaksi Teragih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan