Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 27156|Yanıt: 2

[Kaynak] EF DbContext, bağlamın benzersiz olmasını garanti eder

[Bağlantıyı kopyala]
Yayınlandı 22.08.2020 10:21:31 | | |
EF kullanılarak veritabanını manipüle eder, aynı HTTP isteğinde DbContext (veritabanı işlem bağlam sınıfı) çıkarılır ve benzersizliği sağlar, makalede Entity Framework bağlamının benzersizliğini sağlamak için iki şema kullanılır ve .NET Core platformundaki çözüm eklenir.

Seçenek 1

Bir nesnenin küresel benzersiz olacağı garanti ediliyorsa, kesinlikle klasik bir tasarım deseni düşüneceksiniz: tek bir mod, eğer kullanılacak nesne konuda benzersiz olmalıysa?

Veri yuvası: CallContext, tamam msdn'in callcontent açıklamasına bak.

CallContext, metod çağrıları için iş parçacığı yerel deposuna benzer özel bir koleksiyon nesnesidir ve her mantıksal yürütme iş parçacığına benzersiz bir veri yuvası sağlar. Veri slotları, diğer mantıksal iş parçacıklarındaki çağrı bağlamları arasında paylaşılmaz. Çağrı Bağlamı, yürütme kodunun yolu boyunca ileri geri yayıldığında ve o yoldaki bireysel nesneler tarafından incelendiğinde nesnelere eklenebilir.

Yani, mevcut iş parçacığı nesneyi iş parçacığının yerel depolamasına saklar ve iş parçacığı yok edildikçe nesne de yok edilir.

Kod kullanın:



Kullanım senaryoları: Kişisel olarak, nesnenin iş parçacığında küresel olarak kullanılması gerektiğinde ve diğer thread paket uzantısı iş parçacıklarının erişemediği durumlarda kullanıldığını düşünüyorum. Örneğin, EF'nin veri bağlamında her istek için bir iş parçacığı oluşturulur ve bu sırada, farklı fonksiyonların kullanabileceği bir veri bağlamı nesnesi oluşturulur ve işlem sorunlarını önlemek için birlikte commit edilir. Elbette, bazı insanlar bana kullanmak için bir değişken oluşturabilir miyim diye sorabilir, ki bu da aynı amacı gerçekleştirebilir, ama bu nesne diğer iş parçacığı verileriyle de etkileşime girebilir, bu da iş parçacığında benzersiz olma kavramına aykırı.

Seçenek 2

Senaryo, web http taleplerine dayanır, çünkü her istek yeni bir iş parçacığıdır ve kod şu şekildedir:



.NET Core'da "CallContext" kullanımı

CallContext'in artık mevcut olmadığını biliyoruz. NETStandard veya .NET Core.

Ama<T> Asynclocal'ı kullanarak bir CallContext taklit edebilirsiniz, sadece aşağıdaki statik sınıfı oluşturun:



Referans alınması gereken isim uzayları:



Ayrıca kullanımı da kolay (burada CallContext'i Ortak kitaphaneye koydum):





Önceki:ASP.NET MVC5, önceden derlenmiş modda yayımlanarak sayfa yükleme hızını ve performansını iyileştirir
Önümüzdeki:[Dön]. NET, PPT'yi resim olarak ihraç ediyor
Yayınlandı 25.08.2020 23:38:22 |
İnfuzyonla kokulu değil mi?
 Ev sahibi| Yayınlandı 26.08.2020 21:37:39 |

asp.net çekirdeğin varsayılan enjeksiyon yaşam döngüsü ihtiyaçlarımı karşılamaz

Singleton: IServiceProvider nesnesi tarafından oluşturulan hizmet örnekleri, kök konteyner olarak IServiceProvider nesnesinde saklanır, böylece aynı tür hizmet örnekleri için aynı köke sahip birden fazla IServiceProvider nesnesi aynı nesnede bulunur.
Scoped:IServiceProvider nesnesi tarafından oluşturulan hizmet örnekleri kendi başlarına kaydedilir, böylece aynı IServiceProvider nesnesi tarafından sağlanan aynı türdeki hizmet örnekleri aynı nesnedir.
Geçici: Her hizmet sağlama talebi için, IServiceProvider nesnesi her zaman yeni bir hizmet örneği oluşturur.
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com