Şimdiye kadar Microsoft’un tamamen revize ettiği OR mapper’ının Entity Framework Core ile ilgili en büyük sorunlarından biri group by ile gruplamaların veritabanında değil, RAM’de yapılmasıydı.
Microsoft, geçen hafta yayınlanan Entity Framework Core 1.1 için duyurdu: “Geliştirilmiş LINQ Çevirisi: 1.1 sürümünde, LINQ EF Çekirdek sağlayıcısını iyileştirmede iyi bir ilerleme kaydettik. Bu, veritabanında daha fazla mantık değerlendirilerek (veritabanında değil) daha fazla sorgunun doğru şekilde yürütülmesine olanak tanır. hafıza).” Ancak, bu iyileştirmenin hizipler için geçerli olmadığını gördüm.
Her kalkış şehrinden kaç uçuş olduğunu döndürmesi gereken LINQ komutundan
var gruppen = from p in ctx.FlugSet
orderby p.FreiePlaetze
group p by p.Abflugort into g
select new { Ort = g.Key, Anzahl = g.Count() };
Ayrıca sürüm 1.1’de Entity Framework Core, veritabanındaki tüm kayıtları okuyan ve bunları RAM’de paketleyen bir SQL komutu çalıştırır. Birçok veri kümesiyle bu, dayanılmaz derecede düşük performansa yol açar. Bir utanç!
SELECT [p].[FlugNr], [p].[Abflugort], [p].[Bestreikt], [p].[CopilotId],
[p].[FlugDatum], [p].[Fluggesellschaft], [p].[FlugzeugTypID],
[p].[FreiePlaetze], [p].[LetzteAenderung], [p].[Memo],
[p].[NichtRaucherFlug], [p].[PilotId], [p].[Plaetze], [p].[Preis],
[p].[Timestamp], [p].[Zielort]
FROM [Flug] AS [p]
ORDER BY [p].[Abflugort]
ile gitsen bile gruplar.Count() sadece grup sayısını bilmek istiyorsanız, Entity Framework Core 1.0 ve 1.1 tüm kayıtları veritabanından alır ve RAM’de sayar.
Entity Framework Core, SQL komutlarını doğrudan veritabanına vermenize izin verse de, bunlar şu anda gruplama sonuç yapısıyla eşleşen bir sınıfla değil, yalnızca varlık sınıflarıyla eşlenebilir. Bu durumda, geliştiriciler şimdilik yalnızca yeni Entity Framework Core ve eski Entity Framework’ün tek bir işlemde paralel çalışmasına izin vererek ve ardından bu komutları eski Entity Framework aracılığıyla vererek yönetebilir. Sonuçta, RAM’de gerçekleştirilen herhangi bir veri işlemi, ORM’nin çalışma zamanı günlüğünde bir uyarı oluşturur; Yapılandırma ayarına bağlı olarak geliştiriciler, bir RAM işlemini başlatırken daha dikkatli olmak için bu uyarıyı bir çalışma zamanı hatasına da yükseltebilirler.
Geliştirme ekibi, yol haritasında bu zayıflığı “kritik” olarak tanımlıyor, ancak sorun 1.1 sürümünde devam ediyor.
Entity Framework Core hakkında daha fazla bilgiyi 29 Kasım saat 19:00’da Essen’deki .NET Kullanıcı Grubundaki ücretsiz sunumumda bulabilirsiniz.
()
Haberin Sonu
Microsoft, geçen hafta yayınlanan Entity Framework Core 1.1 için duyurdu: “Geliştirilmiş LINQ Çevirisi: 1.1 sürümünde, LINQ EF Çekirdek sağlayıcısını iyileştirmede iyi bir ilerleme kaydettik. Bu, veritabanında daha fazla mantık değerlendirilerek (veritabanında değil) daha fazla sorgunun doğru şekilde yürütülmesine olanak tanır. hafıza).” Ancak, bu iyileştirmenin hizipler için geçerli olmadığını gördüm.
Her kalkış şehrinden kaç uçuş olduğunu döndürmesi gereken LINQ komutundan
var gruppen = from p in ctx.FlugSet
orderby p.FreiePlaetze
group p by p.Abflugort into g
select new { Ort = g.Key, Anzahl = g.Count() };
Ayrıca sürüm 1.1’de Entity Framework Core, veritabanındaki tüm kayıtları okuyan ve bunları RAM’de paketleyen bir SQL komutu çalıştırır. Birçok veri kümesiyle bu, dayanılmaz derecede düşük performansa yol açar. Bir utanç!
SELECT [p].[FlugNr], [p].[Abflugort], [p].[Bestreikt], [p].[CopilotId],
[p].[FlugDatum], [p].[Fluggesellschaft], [p].[FlugzeugTypID],
[p].[FreiePlaetze], [p].[LetzteAenderung], [p].[Memo],
[p].[NichtRaucherFlug], [p].[PilotId], [p].[Plaetze], [p].[Preis],
[p].[Timestamp], [p].[Zielort]
FROM [Flug] AS [p]
ORDER BY [p].[Abflugort]
ile gitsen bile gruplar.Count() sadece grup sayısını bilmek istiyorsanız, Entity Framework Core 1.0 ve 1.1 tüm kayıtları veritabanından alır ve RAM’de sayar.
Entity Framework Core, SQL komutlarını doğrudan veritabanına vermenize izin verse de, bunlar şu anda gruplama sonuç yapısıyla eşleşen bir sınıfla değil, yalnızca varlık sınıflarıyla eşlenebilir. Bu durumda, geliştiriciler şimdilik yalnızca yeni Entity Framework Core ve eski Entity Framework’ün tek bir işlemde paralel çalışmasına izin vererek ve ardından bu komutları eski Entity Framework aracılığıyla vererek yönetebilir. Sonuçta, RAM’de gerçekleştirilen herhangi bir veri işlemi, ORM’nin çalışma zamanı günlüğünde bir uyarı oluşturur; Yapılandırma ayarına bağlı olarak geliştiriciler, bir RAM işlemini başlatırken daha dikkatli olmak için bu uyarıyı bir çalışma zamanı hatasına da yükseltebilirler.
Geliştirme ekibi, yol haritasında bu zayıflığı “kritik” olarak tanımlıyor, ancak sorun 1.1 sürümünde devam ediyor.
Entity Framework Core hakkında daha fazla bilgiyi 29 Kasım saat 19:00’da Essen’deki .NET Kullanıcı Grubundaki ücretsiz sunumumda bulabilirsiniz.
()
Haberin Sonu