다음을 통해 공유


Entity Framework Core 5.0 계획

중요하다

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

계획 프로세스에 설명된 대로 이해 관계자의 의견을 EF Core 5.0 릴리스에 대한 임시 계획으로 수집했습니다.

중요하다

이 계획은 아직 진행 중입니다. 여기에 아무것도 약속이 없습니다. 이 계획은 우리가 더 많은 것을 배우면서 진화할 출발점입니다. 현재 5.0에 대해 계획되지 않은 몇 가지 사항이 포함될 수 있습니다. 현재 5.0에 대해 계획된 몇 가지 사항이 제외될 수 있습니다.

일반 정보

버전 번호 및 릴리스 날짜

EF Core 5.0은 현재 .NET 5.0 과 동시에릴리스될 예정입니다. 버전 "5.0"이 .NET 5.0과 일치하도록 선택되었습니다.

지원되는 플랫폼

EF Core 5.0은 .NET 5.0을 포함한 모든 .NET Standard 2.1 플랫폼에서 실행될 예정입니다. 이는 .NET Core 플랫폼의 보다 일반적인 .NET 전체수렴의 일부입니다.

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

주요 변경 내용

EF Core 5.0에는 일부호환성이 손상되는 변경 내용이 포함되지만 EF Core 3.0의 경우보다 훨씬 덜 심각합니다. 우리의 목표는 대부분의 애플리케이션이 중단 없이 업데이트할 수 있도록 하는 것입니다.

특히 TPT 지원을 중심으로 데이터베이스 공급자에 대한 몇 가지 주요 변경 내용이 있을 것으로 예상됩니다. 그러나 5.0에 대한 공급자를 업데이트하는 작업은 3.0에 대해 업데이트하는 데 필요한 것보다 적을 것으로 예상합니다.

테마

EF Core 5.0에 대한 대규모 투자의 기초가 될 몇 가지 주요 영역 또는 테마를 추출했습니다.

관례에 의한 명확한 다 대 다 매핑

수석 개발자: @smitpatel, @AndriySvyryd및 @lajones

에 의해 추적됨 #10508

티셔츠 크기: L

상태: 완료

다 대 다는 GitHub 백로그에서 가장 많이 요청된 기능 (약 506표)입니다.

다 대 다 관계에 대한 지원은 다음 세 가지 주요 영역으로 나눌 수 있습니다.

  • 탐색 속성을 건너뜁니다. 다음 테마에서 다룹니다.
  • 속성 집합 엔터티 유형입니다. 이렇게 하면 각 엔터티 형식에 명시적 CLR 형식이 필요하지 않도록 엔터티 인스턴스에 표준 CLR 형식(예: Dictionary)을 사용할 수 있습니다. #9914에 의해 추적됨.
  • 다대다 관계의 쉬운 구성을위한 설탕.

탐색 건너뛰기 지원 외에도, 이제 완전한 경험을 제공하기 위해 다대다 관계의 다른 영역을 EF Core 5.0에 통합합니다.

다대다 탐색 속성(일명 "건너뛰기 탐색")

수석 개발자: @smitpatel 및 @AndriySvyryd

에 의해 #19003 추적됨

티셔츠 크기: L

상태: 완료

첫 번째 테마에 설명된 대로 다대다 지원에는 여러 측면이 있습니다. 이 테마는 특히 건너뛰기 탐색의 사용을 추적합니다. 다대다 지원을 원하는 사람들에게 가장 큰 장애물은 쿼리와 같은 비즈니스 논리에서 조인 테이블을 참조하지 않고 "자연스러운" 관계를 사용할 수 없다는 것입니다. 조인 테이블 엔터티 형식은 여전히 존재할 수 있지만 비즈니스 논리를 방해해서는 안 됩니다.

TPT (테이블-퍼-타입) 상속 매핑

수석 개발자: @AndriySvyryd 및 @smitpatel

에 의해 추적되는 #2266

티셔츠 크기: XL

상태: 완료

TPT는 높은 요청 기능(~289표, 전체 3위)이며 전체 .NET 5 계획의 기본 특성에 적합하다고 느끼는 몇 가지 낮은 수준의 변경이 필요하기 때문에 TPT를 수행하고 있습니다. 3.0에 필요한 변경 내용보다 훨씬 덜 심각해야 하지만 이로 인해 데이터베이스 공급자에 대한 호환성이 손상되는 변경이 발생할 것으로 예상됩니다.

필터링된 항목 포함

수석 개발자: @maumar

에서 추적되는 #1833

티셔츠 크기: M

상태: 완료

필터링된 Include는 많은 양의 작업이 아니며 현재 모델 수준 필터 또는 더 복잡한 쿼리가 필요한 많은 시나리오를 차단 해제하거나 더 쉽게 만들 것으로 판단되는 높은 요청 기능(~376표, 전체 2위)입니다.

분할 포함

수석 개발자: @smitpatel

#20892에 의해 추적됨

티셔츠 크기: L

상태: 완료

EF Core 3.0은 지정된 LINQ 쿼리에 대한 단일 SQL 쿼리를 만들도록 기본 동작을 변경했습니다. 이로 인해 여러 컬렉션에 Include를 사용하는 쿼리에 대한 성능이 크게 저하되었습니다.

EF Core 5.0에서는 새 기본 동작을 유지합니다. 그러나 EF Core 5.0에서는 이제 컬렉션에 대한 여러 쿼리 생성을 허용합니다. 여기에는 단일 쿼리가 있으면 성능이 저하되는 위치가 포함됩니다.

필수 일대일 종속 대상

수석 개발자: @AndriySvyryd 및 @smitpatel

, #12100,에 의해 추적됨

티셔츠 크기: M

상태: 완료

EF Core 3.0에서 소유 형식을 포함한 모든 종속은 선택 사항입니다(예: Person.Address는 null일 수 있음). EF Core 5.0에서는 필요에 따라 종속을 구성할 수 있습니다.

ToTable, ToQuery, ToView, FromSql 등을 합리화합니다.

수석 개발자: @AndriySvyryd 및 @smitpatel

#17270에 의해 추적됨

티셔츠 크기: L

상태: 완료

이전 릴리스에서는 원시 SQL, 키 없는 형식 및 관련 영역을 지원하기 위해 진행했습니다. 그러나 모든 것이 전체적으로 함께 작동하는 방식에는 격차와 불일치가 모두 있습니다. 5.0의 목표는 이러한 문제를 해결하고 다양한 유형의 엔터티 및 관련 쿼리 및 데이터베이스 아티팩트를 정의, 마이그레이션 및 사용하기 위한 좋은 환경을 만드는 것입니다. 컴파일된 쿼리 API에 대한 업데이트도 포함될 수 있습니다.

이 항목은 현재 일부 기능이 너무 관대하여 사용자를 신속하게 실패의 구덩이로 이끌 수 있기 때문에 일부 애플리케이션 수준의 호환성이 손상되는 변경이 발생할 수 있습니다. 이 기능 중 일부는 대신 수행할 작업 지침과 함께 차단될 수 있습니다.

일반 쿼리 개선

수석 개발자: @smitpatel 및 @maumar

5.0 마일스톤 에 포함되고, area-query 레이블이 지정된 문제 추적

티셔츠 크기: XL

상태: 완료

쿼리 변환 코드는 EF Core 3.0에 대해 광범위하게 다시 작성되었습니다. 쿼리 코드는 일반적으로 이 때문에 훨씬 더 강력한 상태입니다. 5.0의 경우 TPT를 지원하고 탐색 속성을 건너뛰는 데 필요한 쿼리 외에는 주요 쿼리를 변경할 계획이 없습니다. 그러나 3.0 정밀 검사에서 남은 일부 기술적 부채를 해결하는 데는 여전히 중요한 작업이 필요합니다. 또한 많은 버그를 수정하고 작은 향상된 기능을 구현하여 전반적인 쿼리 환경을 더욱 개선할 계획입니다.

마이그레이션 및 배포 환경

수석 개발자: @bricelam

#19587에 의해 추적됨

티셔츠 크기: L

상태: 범위 지정/완료

범위 지정: 마이그레이션 번들 기능 EF Core 5.0 릴리스 이후까지 지연되었습니다. 그러나 마이그레이션 관련된 다른 주요 개선 사항은 EF Core 5.0에 포함됩니다.

현재 많은 개발자가 애플리케이션 시작 시 데이터베이스를 마이그레이션합니다. 이는 쉽지만 다음과 같은 이유로 권장되지는 않습니다.

  • 여러 스레드/프로세스/서버가 동시에 데이터베이스를 마이그레이션하려고 시도할 수 있습니다.
  • 이 경우 애플리케이션이 일관되지 않은 상태에 액세스하려고 시도할 수 있습니다.
  • 일반적으로 애플리케이션 실행을 위해 스키마를 수정하는 데이터베이스 권한을 부여해서는 안 됩니다.
  • 문제가 발생하면 깨끗한 상태로 되돌리기가 어렵습니다.

여기서는 배포 시 데이터베이스를 쉽게 마이그레이션할 수 있는 더 나은 환경을 제공하고자 합니다. 다음과 같아야 합니다.

  • Linux, Mac 및 Windows에서 작업
  • 명령줄에서 좋은 경험 하기
  • 컨테이너를 사용하는 지원 시나리오
  • 일반적으로 사용되는 실제 배포 도구/프로세스와 함께 작업하기
  • 적어도 Visual Studio에 통합

그 결과 EF Core(예: SQLite의 더 나은 마이그레이션)와 함께 EF를 넘어서는 엔드투엔드 환경을 개선하기 위한 지침 및 다른 팀과의 장기적인 협업이 많이 개선될 가능성이 높습니다.

EF Core 플랫폼 환경

수석 개발자: @roji 및 @bricelam

에서 추적한 #19588

티셔츠 크기: L

상태: 범위/완료

범위 지정: Blazor, Xamarin, WinForms 및 WPF에 대한 플랫폼 지침 및 샘플이 게시됩니다. Xamarin 및 기타 AOT/링커 작업은 이제 EF Core 6.0에 대해 계획되어 있습니다.

중요하다

Xamarin.Android, Xamarin.iOS, Xamarin.Mac은 이제 Android용 .NET, iOS용 .NET 및 macOS용 .NET으로 .NET(.NET 6부터 시작)에 직접 통합됩니다. 현재 이러한 프로젝트 형식으로 빌드하는 경우 지속적인 지원을 위해 .NET SDK 스타일 프로젝트로 업그레이드해야 합니다. Xamarin 프로젝트를 .NET으로 업그레이드하는 방법에 대한 자세한 내용은 Xamarin에서 .NET & .NET MAUI로 업그레이드 설명서를 참조하세요.

기존 MVC와 유사한 웹 애플리케이션에서 EF Core를 사용하기 위한 좋은 지침이 있습니다. 다른 플랫폼 및 애플리케이션 모델에 대한 지침이 누락되었거나 최신 상태가 아닙니다. EF Core 5.0의 경우 다음을 사용하여 EF Core 사용 환경을 조사, 개선 및 문서화할 계획입니다.

  • Blazor
  • AOT/링커 기능 사용을 포함한 Xamarin
  • WinForms/WPF/WinUI 및 기타 U.I. 프레임워크

이는 EF Core에서 EF Core를 넘어서는 엔드투엔드 환경을 개선하기 위한 지침 및 다른 팀과의 장기적인 협업과 함께 많은 작은 개선이 될 가능성이 높습니다.

살펴볼 특정 영역은 다음과 같습니다.

  • EF 도구(예: 마이그레이션)의 사용 경험을 포함한 배포
  • Xamarin 및 Blazor를 포함한 애플리케이션 모델과 아마도 다른 모델
  • 공간 환경 및 테이블 다시 작성을 포함한 SQLite 환경
  • AOT 및 연결 경험
  • 성능 카운터를 포함한 진단 통합

성능

수석 개발자: @roji

5.0 마일스톤 에서 area-perf 레이블이 붙은 이슈가 추적됨

티셔츠 크기: L

상태: 범위 지정/완료

범위 지정: Npgsql 공급자의 주요 성능 향상이 완료되었습니다. 다른 성능 작업은 이제 EF Core 6.0에 대해 계획되어 있습니다.

EF Core의 경우 성능 벤치마크 제품군을 개선하고 런타임에 대한 직접적인 성능을 개선할 계획입니다. 또한 3.0 릴리스 주기 동안 프로토타입화된 새 ADO.NET 일괄 처리 API를 완료할 계획입니다. 또한 ADO.NET 계층에서는 Npgsql 공급자에 대한 추가 성능 향상을 계획합니다.

이 작업의 일환으로 ADO.NET/EF Core 성능 카운터 및 기타 진단을 적절하게 추가할 계획입니다.

아키텍처/기여자 설명서

주요 문서 작성자: @ajcvickers

#1920 및 에 의해 추적됨

티셔츠 크기: L

상태: 잘라내기

여기서 아이디어는 EF Core의 내부에서 무슨 일이 일어나고 있는지 더 쉽게 이해할 수 있도록 하는 것입니다. 이는 EF Core를 사용하는 모든 사용자에게 유용할 수 있지만, 주요 동기는 외부 사용자가 다음을 더 쉽게 수행할 수 있도록 하는 것입니다.

  • EF Core 코드에 기여
  • 데이터베이스 공급자 만들기
  • 다른 확장 빌드

업데이트: 아쉽게도 이 계획은 너무 야심차게 계획되었습니다. 우리는 여전히 이것이 중요하다고 생각하지만 불행히도 EF Core 5.0과 함께 착륙하지 않습니다.

Microsoft.Data.Sqlite 설명서

주요 문서 작성자: @bricelam

, #1675,에 의해 추적됨

티셔츠 크기: M

상태: 완료되었습니다. 새 설명서는 Microsoft Learn 라이브로.

EF 팀은 Microsoft.Data.Sqlite ADO.NET 공급자도 소유하고 있습니다. 이 공급자를 5.0 릴리스의 일부로 완전히 문서화할 계획입니다.

일반 설명서

주요 문서 작성자: @ajcvickers

문서 리포지토리에서 5.0 마일스톤 아래 문제로 추적됨.

티셔츠 크기: L

상태: 진행 중

3.0 및 3.1 릴리스에 대한 설명서를 업데이트하는 중입니다. 다음 작업도 진행 중입니다.

  • 더 접근하기 쉽고 이해하기 쉽게 하기 위한 시작 안내문의 전면 개편
  • 항목을 더 쉽게 찾고 상호 참조를 추가할 수 있도록 문서 재구성
  • 기존 문서에 자세한 내용 및 설명 추가
  • 샘플 업데이트 및 추가 예제 추가

버그 수정

5.0 마일스톤 에 있는 type-bug 레이블이 지정된 문제들을 추적함

개발자: @roji, @maumar, @bricelam, @smitpatel, @AndriySvyryd, @ajcvickers

티셔츠 크기: L

상태: 진행 중

작성 당시에는 5.0 릴리스에서 135개의 버그가 수정되도록 심사되었지만(62개는 이미 수정됨) 위의 일반 쿼리 개선 사항 섹션과 상당한 겹침이 있습니다.

3.0 릴리스 기간 동안, 유입률(마일스톤에서 작업으로 이어지는 이슈)은 매달 약 23건의 이슈였습니다. 이러한 모든 사항을 5.0에서 수정해야 하는 것은 아닙니다. 대략적인 추정치로 5.0 시간 프레임에서 150개 문제를 추가로 해결할 계획입니다.

작은 개선사항

5.0 마일스톤 type-enhancement 레이블이 지정된 문제들을 추적

개발자: @roji, @maumar, @bricelam, @smitpatel, @AndriySvyryd, @ajcvickers

티셔츠 크기: L

상태: 완료

위에서 설명한 더 큰 기능 외에도 5.0으로 "종이 자르기"를 해결하기 위해 많은 소규모 개선 사항이 예약되어 있습니다. 이러한 향상된 기능 중 상당수는 위에서 설명한 보다 일반적인 테마에서도 다룹니다.

아래 줄

문제는 consider-for-next-release 레이블이 지정되어 추적됩니다.

이는 현재 5.0 릴리스로 일정이 잡히지 않은 버그 수정 및 향상된 기능이지만, 위의 작업 진행 상황에 따라 추가 목표로 검토하겠습니다.

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

제안

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