EF Core 10'daki Yenilikler
EF Core 10 (EF10), EF Core 9'un sonraki sürümüdür ve Kasım 2025'te kullanıma sunulacaktır.
EF10 önizleme olarak kullanılabilir. En son önizleme hakkında bilgi almak için .NET 10 sürüm notları bakın. Yeni önizleme sürümleri kullanıma sunuldukçe bu makale güncelleştirilecektir.
İpucu
GitHub 'dan örnek kodu indirerekörnekleri çalıştırabilir ve hata ayıklayabilirsiniz. Aşağıdaki her bölüm, o bölüme özgü kaynak koduna bağlanır.
EF10 derlemesi için .NET 10 SDK'sını gerektirir ve .NET 10 çalışma zamanının çalıştırılmasını gerektirir. EF10 önceki .NET sürümlerinde çalışmaz ve .NET Framework'te çalışmaz.
Bahşiş
Yenilikler dokümanları her önizleme için güncellenir. Tüm örnekler, EF10 günlük derlemelerini kullanacak şekilde ayarlanmıştır ve bu derlemeler genellikle en son önizlemeye kıyasla birkaç hafta daha tamamlanmış çalışmaya sahiptir. Yeni özellikleri test ederken eski bitlere karşı test yapmamanız için günlük derlemelerin kullanımını şiddetle tavsiye ederiz.
LINQ ve SQL çevirisi
Diğer sorgu geliştirmeleri
- DateOnly.ToDateTime(timeOnly) çevirisi (#35194, katkıda bulunan @mseada94).
- Birden fazla ardışık
LIMIT
için iyileştirme (#35384), @ranma42 tarafından). -
Count
tarafından katkıda bulunulanICollection<T>
(#35381) üzerinde işleminin kullanımı için iyileştirme.
ExecuteUpdateAsync artık normal, ifade olmayan bir lambda kabul ediyor
ExecuteUpdateAsync, veritabanındaki rastgele güncelleştirme işlemlerini ifade etmek için kullanılabilir. Önceki sürümlerde, veritabanı satırlarında gerçekleştirilecek değişiklikler bir ifade ağacı parametresi aracılığıyla sağlanmıştır; bu, bu değişikliklerin dinamik olarak oluşturulmasını oldukça zorlaştırdı. Örneğin, bir Blog'un Görünümlerini güncelleştirmek istediğimizi, ancak koşullu olarak Da Adını kullanmak istediğimizi varsayalım. Atayıcılar parametresi bir ifade ağacı olduğundan, aşağıdaki şekilde bir kodun yazılması gerekiyordu:
// Base setters - update the Views only
Expression<Func<SetPropertyCalls<Blog>, SetPropertyCalls<Blog>>> setters =
s => s.SetProperty(b => b.Views, 8);
// Conditionally add SetProperty(b => b.Name, "foo") to setters, based on the value of nameChanged
if (nameChanged)
{
var blogParameter = Expression.Parameter(typeof(Blog), "b");
setters = Expression.Lambda<Func<SetPropertyCalls<Blog>, SetPropertyCalls<Blog>>>(
Expression.Call(
instance: setters.Body,
methodName: nameof(SetPropertyCalls<Blog>.SetProperty),
typeArguments: [typeof(string)],
arguments:
[
Expression.Lambda<Func<Blog, string>>(Expression.Property(blogParameter, nameof(Blog.Name)), blogParameter),
Expression.Constant("foo")
]),
setters.Parameters);
}
await context.Blogs.ExecuteUpdateAsync(setters);
İfade ağaçlarını el ile oluşturmak karmaşık ve hataya açıktır ve bu yaygın senaryo olması gerekenden çok daha zor hale getirilmiştir. EF 10'dan başlayarak, şimdi bunun yerine aşağıdakileri yazabilirsiniz:
await context.Blogs.ExecuteUpdateAsync(s =>
{
s.SetProperty(b => b.Views, 8);
if (nameChanged)
{
s.SetProperty(b => b.Name, "foo");
}
});
Bu değişikliği önermek ve bunun üzerinde ısrarla durmak için katkıda bulunan @aradalvand'e teşekkürler (#32018sayesinde).