- Bağlantı havuzu oluşturma işlemi diğer ADO.NET uygulamalarında olduğu gibi yapılır. Varlık bağlantısı, geleneksel bağlantı dizesiyle geleneksel veritabanı bağlantısını kullanmaya devam eder. Kullanmak istemiyorsanız bağlantı dizesinde bağlantı havuzunu kapatabileceğinize inanıyorum. ( SQL Server Bağlantı Havuzu Oluşturma (ADO.NET) hakkında daha fazla bilgi edinin )
- Asla küresel bağlamı kullanmayın. ObjectContext, Kimlik Haritası ve İş Birimi dahil olmak üzere çeşitli desenleri dahili olarak uygular. Genel bağlam kullanmanın etkisi, uygulama türüne göre farklıdır.
- Web uygulamaları için istek başına tek bir bağlam kullanın. Web servisleri için arama başına tek bir bağlam kullanın. WinForms veya WPF uygulamasında form veya sunucu başına tek bir bağlam kullanın. Bu yaklaşımın kullanılmasına izin vermeyecek bazı özel gereksinimler olabilir, ancak çoğu durumda bu yeterlidir.
WPF / WinForm uygulaması için hangi etkinin tek bir nesne bağlamına sahip olduğunu bilmek istiyorsanız bu makaleye bakın . Bu NHibernate Oturumu ile ilgili ama fikir aynı.
Düzenle:
EF kullandığınızda, varsayılan olarak her varlığı bağlam başına yalnızca bir kez yükler. İlk sorgu varlık instaransı oluşturur ve dahili olarak saklar. Aynı anahtarla varlık gerektiren sonraki sorgularda bu depolanan örnek döndürülür. Veri deposundaki değerler değiştiyse yine de ilk sorgudaki değerleri içeren varlığı alırsınız. Buna Kimlik haritası deseni denir . Nesne içeriğini varlığı yeniden yüklemeye zorlayabilirsiniz, ancak tek bir paylaşılan örneği yeniden yükler.
Varlık üzerinde yapılan değişiklikler siz SaveChanges
bağlamı çağırıncaya kadar devam etmez . Birden fazla varlıkta değişiklik yapabilir ve aynı anda saklayabilirsiniz. Buna İş Birimi modeli denir . Hangi değiştirilmiş ekli varlığı kaydetmek istediğinizi seçemezsiniz.
Bu iki deseni birleştirdiğinizde bazı ilginç efektler göreceksiniz. Tüm uygulama için yalnızca bir varlık örneğiniz var. İşletmedeki herhangi bir değişiklik, değişiklikler henüz devam etmemiş (işlenmiş) olsa bile tüm başvuruyu etkiler. Çoğu zaman bu istediğiniz şey değildir. WPF uygulamasında bir düzenleme formunuz olduğunu varsayalım. Varlıkla birlikte çalışıyorsunuz ve karmaşık düzenlemeyi iptal etmeye karar veriyorsunuz (değerleri değiştirme, ilgili varlıkları ekleme, diğer ilgili varlıkları kaldırma vb.). Ancak varlık zaten paylaşılan bağlamda değiştirilmiştir. Ne yapacaksın? İpucu: Herhangi bir CancelChanges veya UndoChanges hakkında bilmiyorum ObjectContext
.
Bence sunucu senaryosunu tartışmak zorunda değiliz. Tek bir varlığı birden çok HTTP isteği veya Web hizmeti çağrısı arasında paylaşmak uygulamanızı işe yaramaz hale getirir. Tüm istekler SaveChanges
arasında tek bir iş birimini paylaştığınız için , herhangi bir istek yalnızca kısmi verileri başka bir istekte tetikleyebilir ve kaydedebilir. Bunun başka bir sorunu daha olacaktır - bağlam ve bağlamda varlıklar veya bağlam tarafından kullanılan bir veritabanı bağlantısı ile herhangi bir manipülasyon iş parçacığı için güvenli değildir.
Salt okunur bir uygulama için bile, küresel bir bağlam iyi bir seçim değildir, çünkü uygulamayı her sorguladığınızda muhtemelen yeni veriler istersiniz.