çok fazla açma/kapama. Bu işlem sırasında Birçok sorguları ve aynı bağlantı
, bütün öz izleme-kuruluşlar aynı ObjectContext içinde değiştirilir. İşlenmesi gereken her varlık için, veriden küçük miktarlarda veri alınmalıdır. Bu, aynı SQL sorgusunun çoğuna neden olur, ancak farklı parametreler kullanır.Veritabanına gönderilen sorguları izlemek için Solutions Design'ın ORM Profiler yazılımını kullanıyorum.
kendileri bana iyi görünüyor sorgular. Onlar kısa ve yürütmek için çok zaman alma.
Ancak, ben sorguları aslında nasıl işlendiğini Profilci beni nasıl gösterdiği konusunda karıştı: Gördüğünüz gibi
, bu açılış ve aynı veritabanı bağlantısını kapatma tutar. Şimdi
, tek Aç/Sorgu/Kapat bağlantı için zaman zaman bir göz atın:
Bu açılış ve bir veritabanı bağlantı atıklar kapanış saatinde benziyor.
this answer okuduktan sonra benim kod yüzden şimdi şöyle değiştirildi:
using (var connection = new EntityConnection(ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString))
{
using (var context = new MyEntities(connection))
{
// ...
Şimdi, bağlantısı hala hala aynı bağlantı (iyidir) kullandığını görürüz, ama sorgular arasında kapanmaya ve kendini açmaya devam ediyor.
Gert Arnold açıkça bağlamı kullanmadan önce bağlantıyı açmak önerdi. Daha sonra kodumu değiştirdim, bu şekilde göründüğü gibi:
using (var connection = new EntityConnection(ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString))
{
connection.Open();
using (var context = new MyEntities(connection))
{
// ...
Artık çalışıyor! Her sorgu aynı veritabanı bağlantısı gönderilir:
Ben olarak şimdi merak ediyorum neden bağlamı kullanmadan önce bağlantıyı açmak gerekir?
Bu bir kopya değil. Ben aslında aynı bağlantıyı tekrar kullanabilirim. Sorun, sorguların arasında kendini açmaya/kapatmaya devam etmesidir. –
Bağlamı oluşturmadan önce bağlantıyı açtığınızda da kapanır mı? (Bu arada, kodunuzun tamamen doğru olmadığını düşünüyorum: "yeni EntityConnection" iki kez). –
Çalışıyor! Ancak, önerdiğiniz gibi, bağlamı kullanmadan önce bağlantıyı açıkça açarsam. Neden biliyor musun ? –