Az EF Core 10 újdonságai
Az EF Core 10 (EF10) az EF Core 9 után a következő kiadás, amely 2025 novemberében várható.
Az EF10 előzetes verzióként érhető el. A legújabb előzetes verzióval kapcsolatos információkért tekintse meg .NET 10 kibocsátási megjegyzéseit. Ez a cikk az új előzetes verziók elérhetővé tételének megfelelően frissülni fog.
Borravaló
Futtathatja és hibakeresést végezhet a mintákon, ha letölti a mintakódot a GitHubról. Az alábbi szakaszok az adott szakaszhoz tartozó forráskódra mutatnak.
Az EF10 használatához létre kell készíteni a .NET 10 SDK-t, és a .NET 10-es futtatókörnyezetet kell futtatni. Az EF10 nem fog futni a korábbi .NET-verziókon, és nem fog futni a .NET-keretrendszeren.
Borravaló
Az What's New dokumentáció minden előzetes verzióhoz frissül. Az összes minta az EF10 napi építésekhasználatára van beállítva, amelyek általában több hétnyi pluszmunkát tartalmaznak a legújabb előzetes verzióhoz képest. Határozottan javasoljuk a napi buildek használatát az új funkciók tesztelése során, hogy ne az elavult bitek ellen tesztelje a teszteket.
LINQ és SQL-fordítás
Egyéb lekérdezési fejlesztések
- A DateOnly.ToDateTime(timeOnly) fordítása (#35194, készítette: @mseada94).
- Több egymást követő
LIMIT
(#35384) optimalizálása, amelyet @ranma42 készített). - Az
Count
műveletICollection<T>
használatának optimalizálása (#35381), amelyhez @ChrisJollyAU hozzájárult.
Az ExecuteUpdateAsync mostantól elfogad egy normál, nem kifejezés nélküli lambdát
A ExecuteUpdateAsync tetszőleges frissítési műveletek kifejezésére használható az adatbázisban. A korábbi verziókban az adatbázissorokon végrehajtandó módosításokat egy kifejezésfaparaméteren keresztül adták meg; ez meglehetősen nehézzé tette a módosítások dinamikus összeállítását. Tegyük fel például, hogy frissíteni szeretnénk egy blog nézeteit, de feltételesen a nevét is. Mivel a setters argumentum kifejezésfa volt, a következőhöz hasonló kódot kell írni:
// 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);
A kifejezésfák manuális létrehozása bonyolult és hibalehetőséget jelent, és ez a gyakori forgatókönyv sokkal nehezebb lett volna, mint kellett volna. Az EF 10-től kezdve most már a következőt is megírhatja:
await context.Blogs.ExecuteUpdateAsync(s =>
{
s.SetProperty(b => b.Views, 8);
if (nameChanged)
{
s.SetProperty(b => b.Name, "foo");
}
});
Köszönjük @aradalvand, hogy javasolta és szorgalmazta ezt a változást (#32018).