Entity Framework Core 5.0 Preview 7 ve sonrasında AsNoTrackingWithIdentityResolution()

Womanne

Member
Microsoft, “izleme yok” modunda yükleme yaparken zorunlu kimlik doğrulamasının adını değiştirdi.


Dün bir haber makalesinde Entity Framework Core Preview 7’deki bazı yeni özelliklerin altını çizdim. Haberde bahsedilen içeriğin yanı sıra burada şuna dikkat çekiliyor: AsNoTrackingWithIdentityResolution() soru AsNoTracking().PerformIdentityResolution() değiştirildi.

Entity Framework Core 3.0’dan başlayarak ve izleme modunun aksine, hiçbir izleme modu zaten yüklenmiş olan nesneleri tanımlamaz. Bu, veri kaydının birden fazla çağrılması durumunda, aynı veri kaydı için aynı içeriğe sahip birden fazla nesne oluşturduğu anlamına gelir.

Bir örnek


Çok sayıda uçuş varsa ancak bu uçuşları yalnızca birkaç pilot gerçekleştiriyorsa, bu LINQ sorgusundan sonra izleme modunda olacaktır.

var flightSet = ctx.FlightSet.AsTracking().Include(x => x.Pilot).ToList();

aynı pilota sahip tüm uçuşlar aynı Pilot nesnesine atıfta bulunur.

Ancak bu LINQ sorgusundan sonra


var flightSet = ctx.FlightSet.AsNoTracking().Include(x => x.Pilot).ToList();

veritabanında sadece bir pilot kaydı olsa bile, her uçuş için RAM’de ayrı bir pilot nesne vardır.

.NET 5.0’ın beşinci ön izlemesinde, Microsoft eski davranışı (sürüm 3.0’dan önce) aşağıdakilerle geri getirdi:

var flightSet = ctx.FlightSet.AsNoTracking().PerformIdentityResolution().Include(x => x.Pilot).ToList();

Şimdi Önizleme 7’de şunları yazmanız gerekir:

var flightSet = ctx.FlightSet.AsNoTrackingWithIdentityResolution().Include(x => x.Pilot).ToList();

Ayrıca, Önizleme 7’den başlayarak, tüm sorgular için kimlik çözümlemesi, numaralandırma özelliği kullanılarak varsayılan olarak önceden ayarlanabilir. QueryTrackingBehavior sınıfta Microsoft.EntityFrameworkCore.DbContext ChangeTracker alt nesnesinde. Daha önce burada sadece seçenekler vardı QueryTrackingBehavior.TrackAll VE QueryTrackingBehavior.NoTracking.


()



Haberin Sonu
 
Üst