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

Melihat: 27156|Jawab: 2

[Sumber] EF DbContext menjamin bahwa konteksnya unik

[Salin tautan]
Diposting pada 22/08/2020 10.21.31 | | |
Menggunakan EF untuk memanipulasi database, mengekstrak DbContext (kelas konteks operasi database) dalam permintaan HTTP yang sama untuk memastikan keunikan, artikel menggunakan dua skema untuk memastikan keunikan konteks Entity Framework, dan solusi pada platform .NET Core dilampirkan.

Opsi 1

Jika suatu objek dijamin unik secara global, Anda pasti akan memikirkan pola desain klasik: mode singleton, jika objek yang akan digunakan harus unik di utas?

Slot data: CallContext, ok lihat penjelasan msdn tentang callcontent.

CallContext adalah objek koleksi khusus yang mirip dengan penyimpanan lokal utas untuk panggilan metode, dan menyediakan slot data yang unik untuk setiap utas eksekusi logis. Slot data tidak dibagikan antar konteks panggilan pada utas logis lainnya. Objek dapat ditambahkan ke CallContext saat menyebar bolak-balik di sepanjang jalur kode eksekusi dan diperiksa oleh objek individual di jalur tersebut.

Artinya, utas saat ini menyimpan objek ke penyimpanan lokal utas, dan objek dihancurkan saat utas dihancurkan.

Gunakan kode:



Skenario penggunaan: Saya pribadi berpikir itu digunakan ketika objek perlu digunakan secara global dalam utas, dan utas ekstensi paket utas lainnya tidak dapat mengaksesnya. Misalnya, dalam konteks data EF, utas akan dibuat untuk setiap permintaan, dan pada saat ini, objek konteks data akan dibuat untuk fungsi yang berbeda untuk digunakan, dan akhirnya melakukan commit bersama untuk menghindari masalah transaksi. Tentu saja, beberapa orang mungkin bertanya kepada saya apakah saya dapat membuat variabel untuk digunakan, yang juga dapat mencapai tujuan yang sama, tentu saja, tetapi objek ini juga dapat berinteraksi dengan data utas lain, yang bertentangan dengan konsep menjadi unik dalam utas.

Opsi 2

Skenario ini didasarkan pada permintaan http web, karena setiap permintaan adalah utas baru, dan kodenya adalah sebagai berikut:



Menggunakan "CallContext" di .NET Core

Kami tahu bahwa CallContext tidak lagi tersedia untuk . NETStandard atau .NET Core.

Tetapi Anda dapat menggunakan Asynclocal<T> untuk meniru CallContext, cukup buat kelas statis berikut:



Ruang nama yang perlu direferensikan:



Ini juga mudah digunakan (di sini saya telah menempatkan CallContext di perpustakaan Umum):





Mantan:ASP.NET MVC5 dirilis menggunakan mode yang telah dikompilasi sebelumnya, meningkatkan kecepatan dan kinerja pemuatan halaman
Depan:[Berputar]. NET mengekspor PPT sebagai gambar
Diposting pada 25/08/2020 23.38.22 |
Bukankah itu harum dengan infus?
 Tuan tanah| Diposting pada 26/08/2020 21.37.39 |
Mentimun Dipaparkan pada 2020-8-25 23:38
Bukankah itu harum dengan infus?

Siklus hidup injeksi default asp.net core tidak memenuhi kebutuhan saya

Instans layanan yang dibuat oleh objek Singleton: IServiceProvider disimpan pada objek IServiceProvider sebagai kontainer akar, sehingga beberapa objek IServiceProvider dengan akar yang sama untuk jenis instans layanan yang sama semuanya berada pada objek yang sama.
Instans layanan yang dibuat oleh objek Scoped:IServiceProvider disimpan sendiri, sehingga instans layanan dengan jenis yang sama yang disediakan oleh objek IServiceProvider yang sama semuanya adalah objek yang sama.
Transient: Untuk setiap permintaan penyediaan layanan, objek IServiceProvider selalu membuat instans layanan baru.
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