Rumah >pembangunan bahagian belakang >C++ >Mengapa Kod Rangka Kerja Entiti Saya Melemparkan 'Transaksi baharu tidak dibenarkan kerana terdapat rangkaian lain berjalan dalam sesi'?

Mengapa Kod Rangka Kerja Entiti Saya Melemparkan 'Transaksi baharu tidak dibenarkan kerana terdapat rangkaian lain berjalan dalam sesi'?

Linda Hamilton
Linda Hamiltonasal
2025-01-16 13:36:59315semak imbas

Why Does My Entity Framework Code Throw

Ralat Transaksi Semasa Mengemas kini Model Rangka Kerja Entiti

Dalam percubaan untuk menyambungkan entiti daripada dua pangkalan data berasingan, pembangun mungkin menghadapi ralat: "Baharu transaksi tidak dibenarkan kerana terdapat rangkaian lain yang dijalankan dalam sesi." Mesej yang membingungkan ini boleh timbul apabila mencuba kod yang menggabungkan berbilang gelung dan konteks Rangka Kerja Entiti.

Isu asas berpunca daripada fakta bahawa Rangka Kerja Entiti (EF) mengekalkan sesi untuk setiap konteks yang dibuat. Apabila berbilang rangkaian mengakses konteks yang sama secara serentak, ia boleh menyebabkan konflik transaksi. Untuk menyelesaikan masalah ini, adalah penting untuk mengelak daripada mengubah suai konteks yang sama dalam urutan yang berbeza.

Dalam contoh yang diberikan, punca ralat ialah penggunaan gelung foreach bersarang ke atas pertanyaan EF. Pendekatan ini bermakna bahawa konteks EF baharu telah dicipta untuk setiap lelaran gelung luar, menghasilkan banyak sesi aktif mengakses konteks yang sama secara serentak.

Penyelesaian optimum adalah untuk mendapatkan data daripada EF menggunakan pertanyaan dan menyimpannya dalam koleksi perantaraan (cth., IList). Ini membolehkan konteks dilupuskan dan konteks baharu dicipta untuk setiap lelaran berikutnya tanpa menimbulkan konflik transaksi.

Berikut ialah contoh kod yang diubah suai untuk menggambarkan:

IList<Client> clientList = from a in _dbFeed.Client.Include("Auto") select a;
foreach (RivWorks.Model.NegotiationAutos.Client client in clientList)
{
   var companyFeedDetailList = from a in _dbRiv.AutoNegotiationDetails where a.ClientID == client.ClientID select a;
    // ...
}

Dengan mengasingkan mendapatkan semula data daripada konteks, kami menghapuskan risiko transaksi bertindih dan memastikan tiada ralat ditemui.

Atas ialah kandungan terperinci Mengapa Kod Rangka Kerja Entiti Saya Melemparkan 'Transaksi baharu tidak dibenarkan kerana terdapat rangkaian lain berjalan dalam sesi'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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