Megosztás a következőn keresztül:


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

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).