Entity Framework Core 또는 EF Core는 최신 애플리케이션 아키텍처에 대한 Entity Framework의 총 재작성입니다. 기본 변경으로 인해 직접 업그레이드 경로가 없습니다. 이 설명서의 목적은 EF6 애플리케이션을 EF Core로 포팅하기 위한 엔드투엔드 가이드를 제공하는 것입니다.
중요합니다
포팅 프로세스를 시작하기 전에 EF Core가 애플리케이션에 대한 데이터 액세스 요구 사항을 충족하는지 확인하는 것이 중요합니다. EF Core 설명서에서 필요한 모든 항목을 찾을 수 있습니다.
경고
EF Core는 최신 .NET만 지원하며 .NET Framework를 지원하지 않습니다. 따라서 프로젝트가 여전히 .NET Framework를 대상으로 하는 경우 EF6에서 EF Core로 마이그레이션을 시작하기 전에 최신 .NET으로 마이그레이션해야 합니다. EF6는 최신 .NET을 지원하므로 먼저 EF6을 유지하면서 최신 .NET으로 마이그레이션한 다음 EF6에서 EF Core로 마이그레이션할 수 있습니다.
업그레이드 이유
모든 새 Entity Framework 개발은 EF Core에서 발생합니다. 새로운 기능을 EF6에 백포칭할 계획은 없습니다. EF Core는 최신 .NET 런타임에서 실행되며 런타임, 플랫폼별(예: ASP.NET Core 또는 WPF) 및 언어별 기능을 최대한 활용합니다. 업그레이드로 얻을 수 있는 몇 가지 이점은 다음과 같습니다.
- EF Core의 지속적인 성능 향상을 활용합니다 . 예를 들어 EF6에서 EF Core 6으로 마이그레이션한 한 고객은 쿼리 분할 기능으로 인해 쿼리 사용량이 40배 감소했습니다. 많은 고객은 단순히 최신 EF Core로 이동하여 엄청난 성능 향상을 보고합니다.
- EF Core에서 새 기능을 사용합니다. EF6에 추가된 새로운 기능은 없습니다. 모든 새 기능(예: Azure Cosmos DB 공급자 및
DbContextFactory
)은 EF Core에만 추가됩니다. EF Core에만 적용되는 몇 가지 기능을 포함하여 EF6와 EF Core의 전체 비교는 다음을 참조하세요. EF Core 및 EF6 비교. - 종속성 주입을 사용하여 애플리케이션 스택을 현대화하고 gRPC 및 GraphQL과 같은 기술과 데이터 액세스를 원활하게 통합합니다.
마이그레이션에 대한 참고 사항
이 설명서는 EF Core의 기능인 마이그레이션이라는 용어와 혼동을 방지하기 위해 포트라는 용어와 업그레이드라는 용어를 사용합니다. EF Core의 마이그레이션은 마이그레이션 처리 방법이 크게 향상되어 EF6 Code First 마이그레이션과 호환되지 않습니다. 마이그레이션 기록을 이식하는 권장 방법은 없으므로 EF Core에서 "새로 만들기"를 시작하도록 계획합니다. EF6 마이그레이션에서 코드베이스 및 데이터를 유지할 수 있습니다. EF6에서 최종 마이그레이션을 적용한 다음, EF Core에서 초기 마이그레이션을 만듭니다. 앞으로 EF Core의 기록을 추적할 수 있습니다.
업그레이드 단계
업그레이드 경로는 업그레이드 단계 및 애플리케이션 유형별로 구성된 여러 문서로 분할되었습니다.
EF Core "flavor" 확인
EF Core가 도메인 모델 및 데이터베이스 구현에서 작동하는 방식에는 몇 가지 방법이 있습니다. 일반적으로 대부분의 앱은 이러한 패턴 중 하나를 따르며 포트에 접근하는 방법은 애플리케이션 "flavor"에 따라 달라집니다.
진실의 원천으로서의 코드는 데이터 속성, 유창한 구성, 또는 둘의 조합을 통해 모든 것을 코드와 클래스에서 모델링하는 접근 방식입니다. 데이터베이스는 처음에 EF Core에 정의된 모델을 기반으로 생성되며 추가 업데이트는 일반적으로 마이그레이션을 통해 처리됩니다. 이를 "코드 우선"이라고도 하지만, 한 가지 방법은 기존 데이터베이스로 시작하고 엔터티를 생성한 다음 앞으로 코드로 유지 관리하기 때문에 완전히 정확하지 않습니다.
데이터베이스를 원본으로 사용하는 접근 방식에는 데이터베이스에서 코드를 리버스 엔지니어링하거나 스캐폴딩하는 작업이 포함됩니다. 스키마를 변경하면 변경 내용을 반영하도록 코드가 다시 생성되거나 업데이트됩니다. 이를 "데이터베이스 우선"이라고도 합니다.
마지막으로, 고급 하이브리드 매핑 방법은 코드와 데이터베이스를 별도로 관리한다는 철학을 따르며, EF Core는 둘 사이에 매핑하는 데 사용됩니다. 이 방법은 일반적으로 마이그레이션을 피합니다.
다음 표에서는 몇 가지 높은 수준의 차이점을 요약합니다.
접근 | 개발자 역할 | DBA 역할 | 마이그레이션 | 비계 | 리포지토리 |
---|---|---|---|---|---|
먼저 코드 | 엔터티를 설계하고 생성된 마이그레이션을 검증/맞춤 설정하십시오. | 스키마 정의 및 변경 내용 확인 | 커밋마다 | 해당 없음(N/A) | 엔터티, DbContext 및 마이그레이션 추적 |
데이터베이스 우선 | 변경 후 리버스 엔지니어링 및 생성된 엔터티 확인 | 데이터베이스가 다시 스캐폴드로 변경되면 개발자에게 알릴 수 있습니다. | 해당 없음(N/A) | 스키마 변경 시마다 | 생성된 엔터티를 확장하는 확장/부분 클래스 추적 |
하이브리드. | 엔터티 또는 데이터베이스가 변경 될 때마다 매핑하도록 흐름 구성 업데이트 | 엔터티 및 모델 구성을 업데이트할 수 있도록 데이터베이스가 변경된 경우 개발자에게 알릴 수 있습니다. | 해당 없음(N/A) | 해당 없음(N/A) | 엔터티 및 DbContext 추적 |
하이브리드 접근 방식은 기존 코드 및 데이터베이스 접근 방식에 비해 추가 오버헤드가 있는 고급 접근 방식입니다.
EDMX에서 멀어질 때의 영향 이해
EF6은 EDMX(Entity Data Model XML)라는 특수 모델 정의 형식을 지원했습니다. EDMX 파일에는 CSDL(개념 스키마 정의), MSL(매핑 사양) 및 SSDL(저장소 스키마 정의)을 비롯한 여러 정의가 포함되어 있습니다. EF Core는 내부 모델 그래프를 통해 도메인, 매핑 및 데이터베이스 스키마를 추적하고 EDMX 형식을 지원하지 않습니다. 많은 블로그 게시물과 기사는 실수로 EF Core가 "코드 우선"만 지원한다는 것을 의미합니다. EF Core는 이전 섹션에서 설명한 세 가지 애플리케이션 모델을 모두 지원합니다. 데이터베이스를 리버스 엔지니어링하여 EF Core에서 모델을 다시 빌드할 수 있습니다. 엔터티 모델의 시각적 표현에 EDMX를 사용하는 경우 EF Core에 유사한 기능을 제공하는 오픈 소스 EF Core Power Tools 를 사용하는 것이 좋습니다.
EDMX 파일에 대한 지원 부족의 영향에 대한 자세한 내용은 포팅 EDMX 가이드를 참조 하세요.
업그레이드 단계 수행
전체 애플리케이션을 포트할 필요가 없습니다. EF6 및 EF Core는 동일한 애플리케이션에서 실행할 수 있습니다(참조: 동일한 애플리케이션에서 EF Core 및 EF6 사용). 위험을 최소화하기 위해 다음을 고려할 수 있습니다.
- 아직 없는 경우 .NET Core에서 EF6으로 이동합니다.
- 앱의 작은 부분을 EF Core로 마이그레이션하고 EF6과 함께 실행합니다.
- 결국 나머지 코드베이스를 EF Core로 가져와서 EF6 코드를 사용 중지합니다.
포트 자체에 대해 말하자면, 고차원의 관점에서 여러분은 다음과 같은 일을 하게 됩니다.
- EF6와 EF Core 간의 동작 변경 내용을 검토합니다.
- EF6에서 최종 마이그레이션(있는 경우)을 수행합니다.
- EF Core 프로젝트를 만듭니다.
- 코드를 새 프로젝트에 복사하거나, 리버스 엔지니어링을 실행하거나, 둘 다 조합하여 실행합니다.
- 참조 및 엔터티의 이름을 바꾸고 동작을 업데이트합니다.
-
System.Data.Entity
Microsoft.EntityFrameworkCore
-
DbContext
생성자를 수정하여 옵션을 수용하고/또는OnConfiguring
을 재정의하도록 변경하십시오. -
DbModelBuilder
ModelBuilder
-
DbEntityEntry<T>
이름을EntityEntry<T>
바꿉니다. -
Database.Log
에서Microsoft.Extensions.Logging
(고급) 또는DbContextOptionsBuilder.LogTo
(단순) API로 이동하세요. -
WithRequired
및WithOptional
에 변경 내용을 적용하세요 ( 여기 참조) - 유효성 검사 코드를 업데이트합니다. EF Core에 기본 제공되는 데이터 유효성 검사는 없지만 직접 수행할 수 있습니다.
- EDMX에서 포트하는 데 필요한 단계를 수행합니다.
-
- EF Core 접근 방식에 따라 특정 단계를 수행합니다.
모든 접근 방식과 관련된 많은 고려 사항이 있으므로 EF6와 EF Core 간의 자세한 차이점을 해결하고 해결하는 방법도 검토할 수 있습니다.
.NET