Delen via


Wat is er nieuw in EF Core 10?

EF Core 10 (EF10) is de volgende release na EF Core 9 en is gepland voor release in november 2025.

EF10 is beschikbaar als preview-versie. Zie releaseopmerkingen voor .NET 10 voor informatie over de nieuwste preview. Dit artikel wordt bijgewerkt naarmate er nieuwe preview-versies beschikbaar worden gesteld.

Tip

U kunt de voorbeelden uitvoeren en fouten opsporen door de voorbeeldcode te downloaden van GitHub. Elke sectie hieronder bevat koppelingen naar de broncode die specifiek is voor die sectie.

EF10 vereist dat de .NET 10 SDK wordt gebouwd en dat de .NET 10-runtime moet worden uitgevoerd. EF10 wordt niet uitgevoerd op eerdere .NET-versies en wordt niet uitgevoerd op .NET Framework.

Tip

De Wat is er nieuw documenten worden bijgewerkt voor elke preview. Alle voorbeelden zijn ingesteld voor het gebruik van de dagelijkse versies van EF10, die doorgaans enkele weken extra voltooid werk bevatten in vergelijking met de nieuwste preview. We raden het gebruik van de dagelijkse builds sterk aan bij het testen van nieuwe functies, zodat u uw tests niet uitvoert op verouderde bits.

LINQ en SQL vertaling

Overige verbeteringen aan queries

  • Vertaling voor DateOnly.ToDateTime(timeOnly) (#35194, bijgedragen door @mseada94).
  • Optimalisatie voor meerdere opeenvolgende LIMITs (#35384), bijgedragen door @ranma42).
  • Optimalisatie voor het gebruik van Count bewerking op ICollection<T> (#35381), bijgedragen door @ChrisJollyAU).

ExecuteUpdateAsync accepteert nu een gewone lambda zonder expressie

De ExecuteUpdateAsync kan worden gebruikt om willekeurige updatebewerkingen in de database uit te drukken. In eerdere versies zijn de wijzigingen die moeten worden uitgevoerd op de databaserijen opgegeven via een parameter voor de expressiestructuur; dit maakte het vrij moeilijk om deze wijzigingen dynamisch te bouwen. Stel dat we de weergaven van een blog willen bijwerken, maar voorwaardelijk ook de naam ervan. Omdat het argument setters een expressiestructuur was, moet code zoals het volgende worden geschreven:

// 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);

Het handmatig maken van expressiestructuren is ingewikkeld en foutgevoelig en maakt dit veelvoorkomende scenario veel moeilijker dan het zou moeten zijn. Vanaf EF 10 kunt u nu het volgende schrijven:

await context.Blogs.ExecuteUpdateAsync(s =>
{
    s.SetProperty(b => b.Views, 8);
    if (nameChanged)
    {
        s.SetProperty(b => b.Name, "foo");
    }
});

Dankzij @aradalvand voor het voorstellen en pushen van deze wijziging (in #32018).