Entity Framework Core’da Sorgu İzleme Davranışı

Womanne

Member
Microsoft, izleme olmadan veritabanı okuma işlemlerinin performansını artırmak için Entity Framework Core’da daha zarif bir özellik oluşturdu.


İzsiz mod, Entity Framework ve Entity Framework Core ile kayıtları okurken performansı önemli ölçüde artırır. Ne yazık ki, klasik Entity Framework’te, yazılım geliştiriciler sorgularının her birinde bunu her zaman hatırlamak zorunda kaldılar. AsNoTracking() kullanmak. Bu sadece geliştiriciler için can sıkıcı değil, aynı zamanda istemeden unutma riskini de taşıyor. .NET uygulama performansı ayarlama danışmanlığı görevlerimde, sürekli olarak izlemesiz modun kullanılmadığını görüyorum. Klasik Entity Framework’te, bu durum için kendi çözümlerinize ihtiyacınız vardı, örneğin oturum açmak için bir soyutlama DbSether seferinde izlemesiz modu otomatik olarak etkinleştiren.

Sürüm 1.0’dan bu yana Microsoft, Entity Framework Core’da daha zarif bir çözüm geliştirmiştir: geliştiriciler, Entity Framework Core içeriğinin tamamını izlemesiz moda geçirebilir. Bunun için sınıfta var Microsoft.EntityFrameworkCore.DbContext alt nesnede İzleyiciyi Değiştir numaralandırma özelliği Sorgu İzleme Davranışı: Standartta yükselir QueryTrackingBehavior.TrackAll, bu, izlemenin etkinleştirildiği anlamına gelir. Ancak, geliştiriciler bunları etkinleştirdiğinde QueryTrackingBehavior.NoTracking anahtar, tüm sorgular, uzantı yöntemi kullanılmadan bile izlemesiz modda çalıştırılacaktır. AsNoTracking(). Ardından, bu temel izlemesiz mod için yeni bir uzatma yöntemi var. AsTracking()izleme modunda tekli sorgular çalıştırmak için (aşağıdaki kod örneğine bakın).

Console.WriteLine("Grundeinstellung TrackAll. Abfrage mit AsNoTracking()");
using (WWWingsContext ctx = new WWWingsContext())
{
ctx.ChangeTracker.QueryTrackingBehavior =
QueryTrackingBehavior.TrackAll; // Standard
var flugSet = ctx.FlugSet.AsNoTracking().ToList();
var flug = flugSet[0];
Console.WriteLine(flug + " Zustand: " +
ctx.Entry(flug).State); // Detached
flug.FreiePlaetze--;
Console.WriteLine(flug + " Zustand: " +
ctx.Entry(flug).State); // Modified
int anz = ctx.SaveChanges();
}
Console.WriteLine("Grundeinstellung NoTracking.");
using (WWWingsContext ctx = new WWWingsContext())
{
ctx.ChangeTracker.QueryTrackingBehavior =
QueryTrackingBehavior.NoTracking; // NoTracking
var flugSet = ctx.FlugSet.ToList();
var flug = flugSet[0];
Console.WriteLine(flug + " Zustand: " +
ctx.Entry(flug).State); // Unchanged
flug.FreiePlaetze--;
Console.WriteLine(flug + " Zustand: " +
ctx.Entry(flug).State); // Modified
int anz = ctx.SaveChanges();
}

Console.WriteLine("Grundeinstellung NoTracking. Abfrage mit
AsTracking()");
using (WWWingsContext ctx = new WWWingsContext())
{
ctx.ChangeTracker.QueryTrackingBehavior =
QueryTrackingBehavior.NoTracking; // NoTracking
var flugSet = ctx.FlugSet.AsTracking().ToList();
var flug = flugSet[0];
Console.WriteLine(flug + " Zustand: " +
ctx.Entry(flug).State); // Unchanged
flug.FreiePlaetze--;
Console.WriteLine(flug + " Zustand: " +
ctx.Entry(flug).State); // Modified
int anz = ctx.SaveChanges();
}


Daha fazla Entity Framework Core en iyi uygulamaları için Entity Framework Core ile Modern Veri Erişim Çözümleri e-Kitabıma bakın ($17,50).


()



Haberin Sonu
 
Üst