SORU
6 EYLÜL 2010, PAZARTESİ


Varlık Çerçevesi ve Bağlantı Havuzu

Son zamanlarda benim Varlık Çerçevesi 4.0 kullanmaya başladım .NET 4.0 uygulama ve birkaç şey havuzu ile ilgili merak ediyorum.

  1. MS SQL server o benim durumda bağlantı ADO.NET veri sağlayıcısı tarafından yönetilir biliyorum havuzu. Bu yeni varlıklar içerik (ObjectContext), yani parametresiz 1 ** örneğini de geçerli mi?

  2. Ne gibi avantajları ve dezavantajları) oluşturma bir küresel bağlam varlıklar için uygulama (örneğin bir statik örnek) ya da b) oluşturma ve açığa vuran bir varlık bağlamı için verilen her işlemi/yöntemi ile using blok.

  3. Bilmem Gereken bazı senaryolar için öneriler, en iyi uygulamalar, ya da ortak yaklaşımlar başka?

CEVAP
6 EYLÜL 2010, PAZARTESİ


  1. Bağlantı havuzu oluşturma, diğer ADO.NET uygulama olarak ele alınır. Varlık bağlantı hala geleneksel bağlantı dizesi ile geleneksel veritabanı bağlantısı kullanır. Eğer bunu kullanmak istemiyorsanız bile yayınlı bağlantı dizesi havuzu devre dışı bırakabilirsiniz inanıyorum. (daha fazla SQL Server Connection Pooling (ADO.NET) hakkında bilgi edinin)
  2. Asla ve asla küresel bağlam kullanın. ObjectContext içten Kimliğini Göster ve İş Birimi de dahil olmak üzere çeşitli desen uygular. Küresel bağlamda kullanarak etki uygulama tipine göre farklıdır.
  3. Web uygulamaları için istek başına tek bağlam kullanın. Web servisleri kullanmak için tek bir çağrı başına bağlam. Win veya WPF uygulama kullanımı sunan tek başına form başına veya içerik. Bu yaklaşımı kullanmak için izin vermez bazı özel gereksinimleri olabilir ama çoğu durumda bu yeterli değildir.

Eğer WPF / tek nesne bağlamı ne bilmek istiyorsanız WinForm uygulama article Bu kontrol edin. Arabiriminin Oturum hakkında ama fikir aynı.

Düzenleme:

EF kullandığınızda varsayılan olarak her varlık için yalnızca bir kez başına içerik yükler. İlk sorgu varlık instace oluşturur ve dahili olarak saklar. Aynı anahtar ile varlık gerektiren herhangi bir sonraki sorgu bu saklı örneğini verir. Eğer veri deposunda değerleri değişirse hala ilk sorgudan değerleri ile varlık almak. Bu denirKimlik desen göster. Nesne bağlam varlık yeniden zorlayabilir ama tek bir paylaşılan bir örneğini yeniden yükler.

Herhangi bir değişiklik varlık için yapılan bağlama SaveChanges diyene kadar kalıcı olmaz. Birden çok birimin değişiklikler yapabileceğiniz ve aynı anda saklayabilirsiniz. Bu denirİş desen birimi. Seçici ekli kaydetmek istediğiniz varlık değiştiren diyemezsin.

Bu iki modelin birleştirilmesi ve bazı ilginç efektler görürsünüz. Tüm uygulama için varlık yalnızca bir örneği var. Varlık herhangi bir değişiklik varsa değişiklikler henüz kalıcı değilse bile, tüm uygulama (taahhüt) etkiler. Çoğu kez bu senin istediğin şey değil. WPF uygulamasında düzenleme formu var varsayalım. Varlık ile çalışıyorsanız ve karmaşık editation (değişen değerler, ilgili kuruluşlar, diğer ilgili kuruluşlar ekleme ve kaldırma, vb.) iptal etmek decice. Ama varlık paylaşılan bağlamda değiştirilir. Sen ne yapacaksın? İpucu: ObjectContext CancelChanges veya UndoChanges. bilmem

Server senaryo tartışmamıza gerek yok sanırım. Sadece birden çok HTTP istekleri veya Web hizmeti çağrıları arasında tek varlık paylaşım yazılımı işe yaramaz hale getiriyor. Herhangi bir istek sadece hepsinin arasında iş tek birim paylaşıyorsunuz çünkü SaveChanges tetik ve başka bir isteğin kısmi veri kurtarabilir. Bu da başka bir sorun var - bu bağlamda bir varlık ya da bir veritabanı bağlantısı bağlamında kullanıldığı bağlam ve herhangi bir işleme iş parçacığı güvenli değil.

Hatta salt okunur bir uygulama için genel bir içerik muhtemelen yeni veri her zaman uygulama sorgulamak istiyorum çünkü iyi bir seçim değildir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • IGN

    IGN

    19 EYLÜL 2006
  • mliskIT

    mliskIT

    29 Mart 2012
  • Tracy Hairston

    Tracy Hairst

    22 Mayıs 2009