Entity Framework - Yaşam Döngüsü

Ömür

Bir bağlamın ömrü, örnek oluşturulduğunda başlar ve örnek atıldığında veya çöpte toplandığında sona erer.

  • Bağlam ömrü, ORM'leri kullandığımızda vermemiz gereken çok önemli bir karardır.

  • Bağlam, bir varlık önbelleği gibi performans gösteriyor, bu nedenle bellek tüketiminde çok hızlı büyüyebilen ve ayrıca bellek sızıntılarına neden olabilecek tüm yüklü varlıklara referanslar tuttuğu anlamına gelir.

  • Aşağıdaki diyagramda, Bağlam aracılığıyla uygulamadan veritabanına ve tam tersi veri iş akışının üst düzeyini görebilirsiniz.

Varlık Yaşam Döngüsü

Varlık Yaşam Döngüsü, bir Varlığın oluşturulduğu, eklendiği, değiştirildiği, silindiği vb. Süreci açıklar. Varlıkların yaşam süreleri boyunca birçok durumu vardır. Varlık durumunun nasıl alınacağına bakmadan önce, varlık durumunun ne olduğuna bir göz atalım. Devlet bir tür listesiSystem.Data.EntityState aşağıdaki değerleri bildiren -

  • Added: Varlık eklendi olarak işaretlenir.

  • Deleted: Varlık, silinmiş olarak işaretlenmiştir.

  • Modified: Varlık değiştirildi.

  • Unchanged: Varlık değiştirilmedi.

  • Detached: Varlık izlenmez.

Varlık Yaşam Döngüsündeki Durum Değişiklikleri

Bazen varlıkların durumu bağlam tarafından otomatik olarak belirlenir, ancak geliştirici tarafından manuel olarak da değiştirilebilir. Bir durumdan diğerine geçişlerin tüm kombinasyonları mümkün olsa da, bazıları anlamsızdır. Örneğin,Added varlık Deleted devlet veya tam tersi.

Farklı durumlar hakkında tartışalım.

Değişmemiş Durum

  • Bir varlık Değiştirilmemiş olduğunda, bağlama bağlıdır ancak değiştirilmemiştir.

  • Varsayılan olarak, veritabanından alınan bir varlık bu durumdadır.

  • Bir varlık bağlama eklendiğinde (İliştirme yöntemiyle), benzer şekilde Değiştirilmemiş durumdadır.

  • Bağlam, referans göstermediği nesnelerdeki değişiklikleri izleyemez, bu nedenle eklendiğinde, Değişmemiş olduklarını varsayar.

Müstakil Devlet

  • Ayrılmış, yeni oluşturulan bir varlığın varsayılan durumudur çünkü bağlam, kodunuzdaki herhangi bir nesnenin oluşturulmasını izleyemez.

  • Bu, nesneyi bağlamın bir bloğunun içinde başlatsanız bile geçerlidir.

  • Ayrılmış, izleme devre dışı bırakıldığında veritabanından alınan varlıkların durumudur.

  • Bir varlık ayrıldığında, içeriğe bağlı değildir, bu nedenle durumu izlenmez.

  • Elden çıkarılabilir, değiştirilebilir, diğer sınıflarla birlikte kullanılabilir veya ihtiyacınız olabilecek başka herhangi bir şekilde kullanılabilir.

  • Bunu izleyen bir bağlam olmadığından, Entity Framework için bir anlamı yoktur.

Eyalet eklendi

  • Bir varlık Eklendi durumunda olduğunda, birkaç seçeneğiniz vardır. Aslında, onu yalnızca bağlamdan ayırabilirsiniz.

  • Doğal olarak, bazı özellikleri değiştirseniz bile, durum Eklenmiş olarak kalır, çünkü onu Değiştirilmiş, Değiştirilmemiş veya Silinmiş olarak taşımak anlamsızdır.

  • Bu yeni bir varlıktır ve veritabanındaki bir satırla uyuşmaz.

  • Bu, bu durumlardan birinde olmak için temel bir ön koşuldur (ancak bu kural bağlam tarafından uygulanmaz).

Değiştirilmiş Durum

  • Bir varlık değiştirildiğinde, bu onun Değiştirilmemiş durumda olduğu ve ardından bazı özelliklerin değiştirildiği anlamına gelir.

  • Bir varlık Değiştirilmiş durumuna girdikten sonra Ayrılmış veya Silinmiş durumuna geçebilir, ancak orijinal değerleri el ile geri yükleseniz bile Değiştirilmedi durumuna geri dönemez.

  • Varlığı bağlamdan ayırıp eklemediğiniz sürece Eklendi olarak değiştirilemez, çünkü bu kimliğe sahip bir satır veritabanında zaten mevcuttur ve devam ettirirken bir çalışma zamanı istisnası alırsınız.

Eyalet Silindi

  • Bir varlık, Değiştirilmemiş veya Değiştirilmiş olduğundan Silinmiş durumuna girer ve ardından DeleteObject yöntemi kullanılmıştır.

  • Bu en kısıtlayıcı durumdur, çünkü bu durumdan Müstakil dışında başka bir değere geçiş anlamsızdır.

usingbağlamın kontrol ettiği tüm kaynakların bloğun sonunda atılmasını istiyorsanız. Kullandığınızdausing ifadesi, daha sonra derleyici otomatik olarak bir try / nih bloğu oluşturur ve nihayet bloğunda dispose çağırır.

using (var context = new UniContext()) {

   var student = new Student {
      LastName = "Khan", 
      FirstMidName = "Ali", 
      EnrollmentDate = DateTime.Parse("2005-09-01")
   };

   context.Students.Add(student);
   context.SaveChanges();
}

Uzun süreli bağlamla çalışırken aşağıdakileri göz önünde bulundurun -

  • Belleğe daha fazla nesne ve bunların referanslarını yükledikçe, bağlamın bellek tüketimi hızla artabilir. Bu, performans sorunlarına neden olabilir.

  • Artık gerekli olmadığında bağlamı elden çıkarmayı unutmayın.

  • Bir istisna, içeriğin kurtarılamaz bir durumda olmasına neden olursa, tüm uygulama sona erebilir.

  • Verilerin sorgulandığı ve güncellendiği zaman arasındaki boşluk büyüdükçe eşzamanlılıkla ilgili sorunlara rastlama şansı artar.

  • Web uygulamalarıyla çalışırken, istek başına bir bağlam örneği kullanın.

  • Windows Presentation Foundation (WPF) veya Windows Forms ile çalışırken, form başına bir bağlam örneği kullanın. Bu, içeriğin sağladığı değişiklik izleme işlevini kullanmanıza olanak tanır.

Başparmak Kuralları

Web Applications

  • Web uygulamaları için her istek için bağlamın kullanılması artık yaygın ve en iyi uygulamadır.

  • Web uygulamalarında, çok kısa olan ancak tüm sunucu işlemlerini tutan isteklerle ilgileniriz, bu nedenle bağlamın içinde yaşaması için uygun süre.

Desktop Applications

  • Win Forms / WPF, vb. Gibi masaüstü uygulamaları için bağlam, form / iletişim kutusu / sayfa başına kullanılır.

  • Bağlamın uygulamamız için bir tekil olarak olmasını istemediğimizden, bir formdan diğerine geçerken onu elden çıkaracağız.

  • Bu şekilde, bağlamın birçok yeteneğini kazanacağız ve uzun süreli bağlamların etkilerinden zarar görmeyeceğiz.