다음을 통해 공유


EF Core 10의 새로운 기능

EF Core 10(EF10)은 EF Core 9 이후의 다음 릴리스이며 2025년 11월에 출시될 예정입니다.

EF10은 모든 최신 EF10 기능 및 API 조정을 포함하는 매일 빌드로 사용할 수 있습니다. 여기서 샘플은 이러한 일상적인 빌드를 사용합니다.

GitHub 샘플 코드를다운로드하여 샘플을 실행하고 디버그할 수 있습니다. 아래의 각 섹션은 해당 섹션과 관련된 소스 코드에 연결됩니다.

EF10을 빌드하려면 .NET 10 SDK가 필요하며 .NET 10 런타임을 실행해야 합니다. EF10은 이전 .NET 버전에서 실행되지 않으며 .NET Framework에서 실행되지 않습니다.

새 소식 문서는 각 미리 보기마다 업데이트됩니다. 모든 샘플은 EF10 일일 빌드을 사용하도록 설정되었으며, 이는 최신 미리 보기와 비교할 때 몇 주간의 추가 완료 작업이 포함되어 있습니다. 새로운 기능을 테스트할 때, 구식 코드에 대해 테스트하지 않도록 매일 생성되는 빌드를 사용하는 것을 강력히 권장합니다.

LINQ 및 SQL 번역

기타 쿼리 개선 사항

ExecuteUpdateAsync는 이제 정규식이 아닌 람다를 허용합니다.

ExecuteUpdateAsync 사용하여 데이터베이스에서 임의 업데이트 작업을 표현할 수 있습니다. 이전 버전에서는 데이터베이스 행에서 수행할 변경 내용이 식 트리 매개 변수를 통해 제공되었습니다. 이렇게 하면 이러한 변경 내용을 동적으로 빌드하기가 매우 어려웠습니다. 예를 들어 블로그의 보기를 업데이트하고 조건부로 해당 이름을 업데이트한다고 가정해 보겠습니다. setters 인수는 식 트리이므로 다음과 같은 코드를 작성해야 했습니다.

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

식 트리를 수동으로 만드는 것은 복잡하고 오류가 발생하기 쉬워서 이 일반적인 시나리오를 예상보다 훨씬 어렵게 만듭니다. 이제 EF 10부터 다음을 대신 작성할 수 있습니다.

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

이 변경을 제안하고 추진해 주신 @aradalvand 덕분에(#32018)