· kaynak dev.to (home feed)
EF Core 10'a native left join, isimli query filter'lar, JSON kolonlar ve vector search geliyor
Bir dev.to incelemesine göre EF Core 10, birinci sınıf LeftJoin ve RightJoin LINQ operatörleri, tek tek açılıp kapanabilen query filter'lar, JSON tabanlı complex type'lar ve SQL Server için yerleşik vector benzerlik aramasını getiriyor.

Yakın tarihli bir dev.to incelemesinde ele alınan EF Core 10, alışıldık küçük kullanım kolaylığı iyileştirmelerinin ötesinde bir sürüm. Yazarın belirttiğine göre bu sürüm, uzun süredir kullanılan geçici çözümleri tarihe gömüyor: elle birleştirilen left join'ler, hepsi ya da hiçbiri mantığıyla çalışan global query filter sistemi ve benzerlik araması için harici bir motora duyulan ihtiyaç. İncelemede özellikler, .NET 10 ve SQL Server üzerinde çalışan küçük bir blog, kitap ve yazar modeli üzerinden demonstrations olarak gösteriliyor.
Left ve right join gerçek operatörler oluyor
Şimdiye kadar LINQ-to-Entities'te left join yazmak, GroupJoin, SelectMany ve DefaultIfEmpty zincirlemek anlamına geliyordu — dev.to yazarının deyişiyle, kimsenin bir kullanımdan diğerine hatırlayamadığı bir kalıp. EF Core 10, LeftJoin ve RightJoin'ı birinci sınıf query operatörleri olarak sunuyor; tek bir çağrıda birleştirilen küme, her iki taraf için key selector'lar ve bir result selector alıyor. İncelemeye göre üretilen SQL, eski kalıbın ürettiğiyle aynı, ancak kod daha kısa ve geliştiricinin kastettiği join gibi okunuyor. Yazar bunu, insanların en sık kullanacağı değişiklik olarak nitelendiriyor.
Query filter'lara isim verilebiliyor ve tek tek açılıp kapanabiliyor
Soft delete, çoklu kiracılık (multi-tenancy) gibi kalıplar veya yalnızca doğrulanmış satırları göstermek için kullanılan global query filter'lar daha önce her entity için tek filter izin veriyordu. Daha büyük sınırlama ise şuydu: IgnoreQueryFilters tüm filter'ları aynı anda devre dışı bırakıyordu; bu yüzden hem soft delete filter'ı hem de tenant filter'ı taşıyan bir entity, birini kapatıp diğerini açık tutamıyordu.
EF Core 10 bunu, her filter'ın yapılandırma sırasında bir isim taşıyabilmesiyle çözüyor. Böylece IgnoreQueryFilters bir filter isimleri listesi kabul ediyor ve soft delete edilmiş satırları göstermek zorunda olan ancak tenant izolasyonuna da saygı duyması gereken bir yönetim ekranı, dev.to yazısına göre, hayatta kalan filter'ı elle yeniden uygulamak yerine tek satırlık bir değişikliğe dönüşüyor.
Complex type'lar JSON olarak saklanıyor
Complex type'lar artık ToJson eşlemesiyle tek bir kolonda JSON dokümanı olarak kalıcı hale getirilebiliyor. İncelemede, bir BookAttributes nesnesi — tür, sayfa sayısı, dil ve bir tag dizisi — tek bir nvarchar kolonunda yaşıyor ama LINQ ile sorgulanabilir kalıyor: sayfa sayısı üzerindeki bir koşul, SQL JSON path erişimine çevriliyor. Yazar bunu, kayıttan kayda değişen ve kendilerine özel bir tabloyu hak etmeyen attribute kümeleri için mantıklı bir seçenek olarak konumlandırıyor.
Vector benzerlik araması, yerleşik olarak
En gösterişli eklenen özellik, retrieval-augmented generation senaryolarını hedefliyor. SQL Server 2025 native bir vector tipi getiriyor ve EF Core 10, kolonları bu tipe eşleyebiliyor ve uzaklık fonksiyonlarını çevirebiliyor: kosinüs metriğiyle EF.Functions.VectorDistance'a göre sıralama, doğrudan context üzerinden bir en yakın komşu sorgusu üretiyor. Embedding'ler üretmek için Microsoft.Extensions.AI ile birlikte kullanıldığında — demo bir Azure OpenAI embedding modeli kullanıyor — bir RAG pipeline'ının retrieval yarısı, yığında ayrı bir vector veritabanı olmadan sıradan bir EF Core sorgusuna dönüşüyor.
Küçük değişiklikler ve upgrade uyarıları
İnceleme ayrıca ExecuteUpdateAsync'in ifade gücünün artmaya devam ettiğini, diğer kolonlara dayalı güncellemeler de dahil olmak üzere daha fazla toplu güncellemenin entity'leri hiç yüklemeden yapılabilmesini sağladığını belirtiyor. Kapatılan bir grup LINQ çeviri eksiği ve mevcut sorgular için iyileştirilmiş SQL, sadece upgrade edilerek geliyor.
Yazar birkaç tuzaklara dikkat çekiyor: vector tipi SQL Server 2025 veya güncel bir Azure SQL katmanı gerektiriyor; mevcut tek filter'ları taşımak, onlara isim vermeyi ve her IgnoreQueryFilters çağrı noktasını güncellemeyi gerektiriyor, aksi halde davranış değişir; JSON'a eşlenmiş kolonlar sorunsuz sorgulanıyor ancak büyük tablolarda filter performansı, veritabanının JSON indeksleme desteğine bağlı; ve LeftJoin sonucunun sağ tarafı, eşleşme olmadığında null olabileceğinden projeksiyonlar bunu savunmacı bir şekilde ele almalı.
Neden önemli
EF Core 10, .NET geliştiricilerinin yıllardır çaresizce geçiştirdiği sürtünmeleri ortadan kaldırıyor. LeftJoin ve RightJoin, iş uygulamalarının en yaygın sorgu biçimlerinden birindeki tekrar eden kodu yok ediyor ve isimli filter'lar, soft delete ile çoklu kiracılığı birleştiren herkes için gerçek bir mimari baş ağrısını çözüyor. JSON eşlemesi, ekiplere katı ilişkisel şemalar ile tiplendirilmemiş blob'lar arasımda pragmatik bir seçenek veriyor. En önemlisi, yerleşik vector search, RAG özellikleri inşa eden .NET ekiplerinin verilerini — ve benzerlik sorgularını — SQL Server içinde tutabilmesini, ayrıca bir vector store işletmek zorunda kalmadan, birbirinden kopmaya yüz tutmuş altyapıyı birleştirmesini sağlıyor.
- #ef-core
- #dotnet
- #linq
- #sql-server
- #vector-search