다음을 통해 공유


Entity Framework Core 6.0 계획

중요하다

EF Core 6.0 이제릴리스되었습니다. 이 페이지는 계획의 역사적 기록으로 남아 있습니다.

계획 프로세스설명한 대로 관련자의 의견을 EF Core(Entity Framework Core) 6.0 릴리스 계획에 수집했습니다. 이 계획은 일정 및 범위 조정을 반영하도록 주기적으로 업데이트됩니다.

이전 릴리스와 달리 이 계획은 6.0 릴리스에 대한 모든 작업을 다루지 않습니다. 대신, 이 릴리스에 투자하려는 위치와 방법을 나타내지만, 릴리스에서 작업하는 동안 피드백을 수집하고 학습할 때 범위를 조정하거나 새 작업을 유연하게 끌어올 수 있습니다.

중요하다

이 계획은 약정이 아닙니다. 그것은 우리가 더 많은 것을 배울 때 진화 할 시작점입니다. 현재 6.0에 대해 계획되지 않은 몇 가지 사항이 포함될 수 있습니다. 현재 6.0에 대해 계획된 몇 가지 사항은 펀트 아웃 될 수 있습니다.

일반 정보

버전 번호 및 릴리스 날짜

EF Core 6.0은 EF Core 5.0 이후의 다음 릴리스이며 현재 .NET 6과 동시에 2021년 11월에 릴리스될 예정입니다.

지원되는 플랫폼

EF Core 6.0에는 .NET 6이 필요합니다. EF Core 6.0은 .NET Standard 버전을 대상으로 하지 않습니다. 자세한 내용은 .NET Standard 향후참조하세요.

EF Core 6.0은 .NET Framework에서 실행되지 않습니다.

EF Core 6.0은 LTS(장기 지원) 릴리스.NET 6과 일치합니다.

주요 변경 내용

EF Core와 .NET 플랫폼을 계속 발전시키면서 EF Core 6.0에는 몇 가지 주요 변경 사항이 포함될 것입니다. 우리의 목표는 대부분의 애플리케이션이 중단 없이 업데이트할 수 있도록 하는 것입니다.

테마

다음 영역은 EF Core 6.0에 대한 대규모 투자의 기초를 형성합니다.

요청이 많은 기능

언제나처럼 계획 프로세스에 대한 주요 입력은 GitHub 기능에 대한투표(👍)에서 비롯됩니다. EF Core 6.0의 경우 다음과 같은 높은 요청 기능을 사용할 계획입니다.

SQL Server 임시 테이블

#4693에 의해 추적

상태: 완료

티셔츠 크기: 큼

임시 테이블은 일반 테이블의 경우와 같이 가장 최근 데이터만 저장되는 것이 아니라 특정 시점테이블에 저장된 데이터에 대한 쿼리를 지원합니다. EF Core 6.0을 사용하면 마이그레이션을 통해 임시 테이블을 만들 수 있을 뿐만 아니라 LINQ 쿼리를 통해 데이터에 액세스할 수 있습니다.

초기에 이 작업의 범위는 이슈에 설명된으로 지정되었습니다. 릴리스 중에 피드백에 따라 추가 지원을 끌어올 수 있습니다.

JSON 열

, #4021,에 의해 추적됨

상태: 잘라내기

티셔츠 크기: 보통

이 기능은 모든 데이터베이스 공급자가 구현할 수 있는 JSON 지원에 대한 일반적인 메커니즘 및 패턴을 소개합니다. 커뮤니티와 협력하여 NpgsqlPomelo MySQL대한 기존 구현을 조정하고 SQL Server 및 SQLite에 대한 지원을 추가할 것입니다.

컬럼속성.순서

에 의해 추적됨 #10059

상태: 진행 중

티셔츠 크기: 작음

이 기능을 사용하면 마이그레이션 또는 EnsureCreated사용하여 테이블 만들 때 열을 임의로 정렬할 수 있습니다. 기존 테이블의 열 순서를 변경하려면 테이블을 다시 작성해야 하며 이는 EF Core 릴리스에서 지원하려는 것이 아닙니다.

성능

EF Core는 일반적으로 EF6보다 빠르지만 성능이 크게 향상될 수 있는 영역이 여전히 있습니다. EF Core 6.0에서 이러한 영역 중 몇 가지를 해결하는 동시에 성능 인프라 및 테스트를 개선할 계획입니다.

이 테마에는 리소스에 초점을 맞추는 위치를 알려주는 반복적인 조사가 많이 포함됩니다. 다음으로 시작할 계획입니다.

성능 인프라 및 새 테스트

상태: 범위 지정/완료

티셔츠 크기: 보통

EF Core 코드베이스에는 매일 실행되는 일련의 성능 벤치마크가 이미 포함되어 있습니다. 6.0의 경우 이러한 테스트의 인프라를 개선하고 새 테스트를 추가할 계획입니다. 또한 주요 성능 시나리오를 프로파일하고 발견된 쉬운 문제들을 해결할 것입니다.

업데이트: 테스트 인프라를 개선하고 EF Core 6에 대해 수행된 작업을 지원하기 위한 새 테스트를 추가했습니다. 이 영역의 추가 개선 사항은 EF Core 6.0 릴리스에서 제외되었습니다.

컴파일된 모델

에 의해 추적된 #1906

상태: 완료

티셔츠 크기: X-Large

컴파일된 모델을 사용하면 컴파일된 형식의 EF 모델을 생성할 수 있습니다. 이렇게 하면 모델에 액세스할 때 더 나은 시작 성능뿐만 아니라 일반적으로 성능이 향상됩니다.

TechEmpower Fortunes

에서 추적 #23611

상태: 완료

티셔츠 크기: X-Large

우리는 지난 몇 년 동안 PostgreSQL 데이터베이스를 대상으로 .NET에서 업계 표준 TechEmpower 벤치마크를 실행해왔다. Fortunes 벤치마크 특히 EF 시나리오와 관련이 있습니다. 다음을 포함하여 이 벤치마크의 여러 변형이 있습니다.

  • ADO.NET 직접 사용하는 구현입니다. 여기에 나열된 세 가지 중 가장 빠른 구현입니다.
  • Dapper사용하는 구현입니다. 이는 ADO.NET 직접 사용하는 것보다 느리지만 여전히 빠릅니다.
  • EF Core를 사용하는 구현입니다. 이는 현재 세 가지 중 가장 느린 구현입니다.

EF Core 6.0의 목표는 TechEmpower Fortunes 벤치마크에서 Dapper의 성능과 일치하는 EF Core 성능을 얻는 것입니다. (이것은 중요한 도전이지만 가능한 한 가까워지기 위해 최선을 다할 것입니다.)

링커/AOT

, #10963,에 의해 추적됨

상태: 범위 지정/완료

티셔츠 크기: 보통

EF Core는 많은 양의 런타임 코드 생성을 수행합니다. 이는 .NET MAUI 및 Blazor와 같은 링커 트리 흔들림에 의존하는 앱 모델과 iOS와 같은 동적 컴파일을 허용하지 않는 플랫폼에는 어려운 일입니다. 우리는 EF Core 6.0의 일환으로이 공간에서 조사를 계속하고 우리가 할 수있는 한 목표 개선을 할 것입니다. 그러나 6.0 시간 프레임의 격차를 완전히 좁힐 것으로 기대하지는 않습니다.

마이그레이션 및 배포

EF Core 5.0 대해 수행된조사에 따라 마이그레이션 관리 및 데이터베이스 배포에 대한 향상된 지원을 도입할 계획입니다. 여기에는 다음 두 가지 주요 영역이 포함됩니다.

마이그레이션 번들

에 의해 추적됨 #19693

상태: 완료

티셔츠 크기: 보통

마이그레이션 번들은 프로덕션 데이터베이스에 마이그레이션을 적용하는 자체 포함 실행 파일입니다. 이 동작은 dotnet ef database update일치하지만 필요한 모든 것이 단일 실행 파일에 포함되어 있으므로 SSH/Docker/PowerShell 배포가 훨씬 쉬워집니다.

마이그레이션 관리

에 의해 추적된 #22945

상태: 잘림

티셔츠 크기: 큼

애플리케이션에 대해 생성된 마이그레이션 수는 부담이 될 수 있습니다. 또한 이러한 마이그레이션은 필요하지 않은 경우에도 애플리케이션과 함께 자주 배포됩니다. EF Core 6.0에서는 더 나은 도구 및 프로젝트/어셈블리 관리를 통해 이를 개선할 계획입니다. 해결하려는 두 가지 특정 문제는 여러 마이그레이션을 하나의 깨끗한 모델 스냅샷다시 생성하는 것입니다.

업데이트: 리소스 제약 조건으로 인해 이 영역의 대부분의 작업이 6.0으로 중단되었습니다.

기존 기능 개선 및 버그 수정

6.0.0 마일스톤 에 할당된 문제나 버그는 현재 이 릴리스에 포함되어 있습니다. 여기에는 많은 작은 향상된 기능과 버그 수정이 포함됩니다.

EF6 쿼리 동등성

'ef6 패리티'와 6.0 마일스톤 레이블이 지정된 문제에 의해 추적됩니다.

상태: 범위 지정/완료

티셔츠 크기: 큼

EF Core 5.0은 EF6에서 지원되지 않는 패턴 외에도 EF6에서 지원하는 대부분의 쿼리 패턴을 지원합니다. EF Core 6.0의 경우 격차를 해소하고 지원되는 EF Core 쿼리를 지원되는 EF6 쿼리의 진정한 상위 집합으로 만들 계획입니다. 이는 격차 조사를 통해 추진될 것이지만 이미 GroupBy 변환 후 FirstOrDefault, 원시 및 매핑되지 않은 유형에 대한 원시 SQL 쿼리 같은 GroupBy 문제를 포함합니다.

업데이트: 자원 조달 제약 조건 및 우선 순위 조정으로 인해 기본 형식 및 매핑되지 않은 형식에 대한 원시 SQL 쿼리가 6.0에서 제거되었습니다.

값 객체

#9906에 의해 추적됨

상태: 잘라내기

티셔츠 크기: 보통

이전에는 집계 지원위한 소유 엔터티가 값 개체를적절한 근사치라는 팀 보기였습니다. 경험에 따르면 그렇지 않은 것으로 나타났습니다. 따라서 EF Core 6.0에서는 도메인 기반 디자인에서 값 개체의 요구에 초점을 맞춘 더 나은 환경을 도입할 계획입니다. 이 방법은 소유된 엔터티가 아닌 값 변환기를 기반으로 합니다.

이 작업은 처음에 여러 열에 매핑되는값 변환기를 허용하도록 범위가 지정됩니다. 릴리스 중에 피드백에 따라 추가 지원을 끌어올 수 있습니다.

Azure Cosmos DB 데이터베이스 공급자

이슈들은 'area-cosmos'라는 레이블과 6.0 마일스톤으로 분류되어 추적됩니다.

상태: 확장/완료

티셔츠 크기: 큼

EF Core 6.0의 Azure Cosmos DB 공급자에 대한 개선 사항에 대한 피드백을 적극적으로 수집하고 있습니다. 우리가 더 많은 정보를 알게 되면 이 문서를 업데이트하겠습니다. 지금은 필요한 Azure Cosmos DB 기능에 대해 투표(👍)해야 합니다.

업데이트: Azure Cosmos DB 공급자를 중심으로 광범위한 고객 개발을 수행하고 있습니다. 이로 인해 다음과 같은 향상된 기능이 EF Core 6.0으로 향상되었습니다.

업데이트: 6.0 릴리스에서 다음과 같은 문제가 해결되었습니다.

애플리케이션에 모델 빌드 규칙 노출

, #214,에 의해 추적됨

상태: 잘라짐

티셔츠 크기: 보통

EF Core는 .NET 형식에서 모델을 빌드하기 위한 규칙 집합을 사용합니다. 이러한 규칙은 현재 데이터베이스 공급자에 의해 제어됩니다. EF Core 6.0에서는 애플리케이션이 이러한 관례에 연결하고 변경할 수 있도록 할 계획입니다.

제로 버그 잔액(ZBB)

type-bug 레이블이 지정된 문제들이 6.0 마일스톤에서 추적됨.

상태: 진행 중/범위 조정 중

티셔츠 크기: 큼

EF Core 6.0 시간 프레임 동안 모든 미해결 버그를 수정할 계획입니다. 유의해야 할 몇 가지 사항은 다음과 같습니다.

  • 이는 특히 형식 버그레이블이 지정된 문제에 적용됩니다.
  • 버그에 제대로 수정하기 위해 디자인 변경 또는 새 기능이 필요한 경우와 같은 예외가 있습니다. 이러한 문제는 blocked 레이블로 표시됩니다.
  • GA/RTM 릴리스가 가까워짐에 따라 필요할 때에는 위험을 기준으로 버그 처리를 연기하는 것이 일반적인 관행입니다.

기타 기능

문제는 6.0 마일스톤에서 type-enhancement 레이블이 지정되어 추적됨.

상태: 완료

티셔츠 크기: 큼

EF 6.0에 대해 계획된 기타 기능은 다음을 포함하지만 제한되지는 않습니다.

업데이트: 6.0 릴리스에서 다음과 같은 문제가 해결되었습니다.

.NET 통합

EF Core 팀은 여러 관련 있지만 독립적인 기술에서도 작업합니다. 특히 다음 작업을 수행할 계획입니다.

System.Data의 향상된 기능

6.0 마일스톤 area-System.Data 레이블이 지정된 dotnet\r런타임 리포지토리의 문제 추적

상태: 범위 지정/완료

티셔츠 크기: 큼

이 작업에는 다음이 포함됩니다.

  • 일괄 처리 API구현합니다.
  • 다른 .NET 팀 및 커뮤니티와 지속적으로 협력하여 ADO.NET 이해하고 발전합니다.

업데이트: 6.0 릴리스에서 다음과 같은 문제가 해결되었습니다.

Microsoft.Data.Sqlite의 향상된 기능

6.0 마일스톤 에서 type-enhancementarea-adonet-sqlite 레이블이 지정된 문제 추적

상태: 범위 지정/완료

티셔츠 크기: 보통

Microsoft.Data.Sqlite에는 연결 풀링 및 성능을 위해 준비된 명령문 등 몇 가지 작은 개선 사항이 계획되어 있습니다.

업데이트: 준비된 SQL 문이 6.0 릴리스에서 제외되었습니다.

Nullable 참조 형식

에 의해 추적됨 #14150

상태: 완료

티셔츠 크기: 큼

nullable 참조 형식 사용하도록 EF Core 코드에 주석을 추가합니다.

실험 및 조사

EF 팀은 EF Core 6.0 기간 동안 두 가지 영역에서 실험 및 조사하는 데 시간을 투자할 계획입니다. 이는 학습 프로세스이므로 6.0 릴리스에 대한 구체적인 결과물은 계획되지 않습니다.

SqlServer.Core

.NET Data Lab 리포지토리 에서 추적되었습니다.

상태: 진행 중

티셔츠 크기: 진행 중

Microsoft.Data.SqlClient SQL Server용 완전한 기능을 갖춘 ADO.NET 데이터베이스 공급자입니다. .NET Core 및 .NET Framework 모두에서 광범위한 SQL Server 기능을 지원합니다. 그러나 동작 간에 복잡한 상호 작용이 많은 크고 오래된 코드베이스이기도 합니다. 따라서 최신 .NET Core 기능을 사용하여 얻을 수 있는 잠재적인 이익을 조사하기가 어렵습니다. 따라서 커뮤니티와 공동으로 실험을 시작하여 .NET용 고성능 SQL Server 드라이버의 잠재력을 파악합니다.

중요하다

Microsoft.Data.SqlClient에 대한 투자는 변경되지 않습니다. EF Core를 사용 또는 사용하지 않고 SQL Server 및 SQL Azure에 연결하는 것이 좋습니다. 새로운 SQL Server 기능이 도입되면 계속 지원됩니다.

GraphQL

상태: 진행 중

티셔츠 크기: 진행 중

GraphQL 다양한 플랫폼에서 지난 몇 년 동안 견인력을 얻고 있습니다. 공간을 조사하고 .NET을 사용하여 환경을 개선하는 방법을 찾을 계획입니다. 여기에는 커뮤니티와 협력하여 기존 에코시스템을 이해하고 지원하는 작업이 포함됩니다. Microsoft의 특정 투자는 기존 작업에 대한 기여의 형태거나 Microsoft 스택에서 보완적인 요소를 개발하는 형태로 이루어질 수 있습니다.

DataVerse(이전의 Common Data Services)

상태: 진행 중

티셔츠 크기: 진행 중

DataVerse 비즈니스 애플리케이션의 신속한 개발을 위해 설계된 열 기반 데이터 저장소입니다. BLOB(이진 개체)과 같은 복잡한 데이터 형식을 자동으로 처리하고 조직 및 연락처와 같은 기본 제공 엔터티와 관계를 포함합니다. SDK가 있지만 개발자는 고급 LINQ 쿼리를 사용하고 작업 단위를 활용하며 일관된 데이터 액세스 API를 갖도록 EF Core 공급자를 사용하는 것이 도움이 될 수 있습니다. 팀은 DataVerse에 연결하는 .NET 개발자 환경을 개선하는 다양한 방법을 고려합니다.

컷라인 아래

consider-for-current-release 레이블이 지정된 문제 추적

이는 버그 수정 및 향상된 기능으로, 현재 6.0 릴리스로 예약된 것은 아니지만 릴리스 과정에서의 피드백 및 위의 작업 진행 상황을 바탕으로 검토할 것입니다. 이러한 문제는 EF Core 6.0으로 가져와서 자동으로 다음 릴리스의 후보가 될 수 있습니다.

항상 계획할 때 가장 많이 투표된 이슈를 고려합니다. 릴리스에서 이러한 문제를 줄이는 것은 항상 고통스럽지만, 가지고 있는 리소스에 대한 현실적인 계획이 필요합니다. 필요한 기능에 대해 투표(👍)했는지 확인합니다.

제안

계획에 대한 피드백이 중요합니다. 문제의 중요성을 나타내는 가장 좋은 방법은 GitHub에서 해당 문제에 대해 투표(👍)하는 것입니다. 그러면 이 데이터는 다음 릴리스에 대한 계획 프로세스에 활용될 것입니다.