EF Core & EF6 비교

EF Core

EF Core(Entity Framework Core)는 .NET용 최신 개체 데이터베이스 매퍼입니다. LINQ 쿼리, 변경 내용 추적, 업데이트 및 스키마 마이그레이션을 지원합니다.

EF Core는 데이터베이스 공급자 플러그 인 모델을 통해 SQL Server/Azure SQL Database, SQLite, Azure Cosmos DB, MySQL, PostgreSQL, 많은 추가 데이터베이스와 작동합니다.

EF6

EF6(Entity Framework 6)은 .NET Framework용으로 디자인된 개체 관계형 매퍼이나 .NET Core를 지원합니다. EF6은 안정적인 지원 제품이지만 더 이상 활발히 개발되고 있지 않습니다.

기능 비교

EF Core는 EF6에서 구현되지 않을 새로운 기능을 제공합니다. 그러나 일부 EF6 기능은 현재 EF Core에서 구현되지 않았습니다.

다음 표에서는 EF Core 및 EF6에서 사용할 수 있는 기능을 비교합니다. 이는 개략적인 비교로서, 모든 기능을 나열하거나 다른 EF 버전에 있는 동일한 기능 간의 차이를 설명하지는 않습니다.

EF Core 열은 기능이 처음 나타나는 제품 버전을 나타냅니다.

모델 만들기

기능 EF6.4 EF Core
기본 클래스 매핑 Yes 1.0
매개 변수가 포함된 생성자 2.1
속성 값 변환 2.1
키가 없는 매핑된 형식 2.1
규칙 Yes 1.0
사용자 지정 규칙 7.0
데이터 주석 Yes 1.0
흐름 API Yes 1.0
상속: TPH(계층 구조별 테이블) Yes 1.0
상속: TPT(형식별 테이블) Yes 5.0
상속: TPC(구체적인 클래스별 테이블) 7.0
섀도 상태 속성 1.0
대체 키 1.0
다 대 다 탐색 Yes 5.0
조인 엔터티가 없는 다 대 다 Yes 5.0
키 생성: 데이터베이스 Yes 1.0
키 생성: 클라이언트 1.0
복합/소유된 형식 Yes 2.0
공간 데이터 Yes 2.2
모델 형식: 코드 Yes 1.0
데이터베이스에서 모델 만들기: 명령줄 Yes 1.0
데이터베이스에서 모델 업데이트 Partial 백로그에서(#831)
전역 쿼리 필터 2.0
테이블 분할 Yes 2.0
엔터티 분할 7.0
데이터베이스 스칼라 함수 매핑 나쁨 2.0
데이터베이스 테이블 반환 함수 매핑 나쁨 5.0
필드 매핑 1.1
nullable 참조 형식(C# 8.0) 3.0
모델의 그래픽 시각화 Yes 지원 계획 없음(1)
그래픽 모델 편집기 Yes 지원 계획 없음(1)
모델 형식: EDMX(XML) Yes 지원 계획 없음(1)
데이터베이스에서 모델 만들기: VS 마법사 Yes 지원 계획 없음(1)

데이터 쿼리

기능 EF6.4 EF Core
LINQ 쿼리 Yes 1.0
읽기 가능한 생성된 SQL 나쁨 1.0
GroupBy 변환 Yes 2.1
관련 데이터 로드: 즉시 Yes 1.0
관련 데이터 로드: 파생된 형식에 즉시 로드 2.1
관련 데이터 로드: 지연 Yes 2.1
관련 데이터 로드: 명시적 Yes 1.1
원시 SQL 쿼리: 엔터티 형식 Yes 1.0
원시 SQL 쿼리: 키 없는 엔터티 형식 Yes 2.1
원시 SQL 쿼리: LINQ로 작성 1.0
명시적으로 컴파일된 쿼리 나쁨 2.0
await foreach(C# 8.0) 3.0
텍스트 기반 쿼리 언어(Entity SQL) Yes 지원 계획 없음(1)

데이터 저장

기능 EF6.4 EF Core
변경 내용 추적: 스냅샷 Yes 1.0
변경 내용 추적: 알림 Yes 1.0
변경 내용 추적: 프록시 Yes 5.0
추적된 상태 액세스 Yes 1.0
낙관적 동시성 Yes 1.0
트랜잭션 1.0
문 일괄 처리 1.0
저장 프로시저 매핑 7.0
연결이 끊긴 그래프 하위 수준 API 나쁨 1.0
연결이 끊긴 그래프 엔드투엔드 1.0(부분, #5536)

기타 기능

기능 EF6.4 EF Core
마이그레이션 Yes 1.0
데이터베이스 만들기/삭제 API Yes 1.0
시드 데이터 Yes 2.1
연결 복원력 Yes 1.1
인터셉터 Yes 3.0
이벤트 Yes 3.0(부분, #626)
간단한 로깅(Database.Log) Yes 5.0
DbContext 풀링 2.0

데이터베이스 공급자(2)

기능 EF6.4 EF Core
SQL Server 1.0
MySQL 1.0
PostgreSQL 1.0
Oracle 1.0
SQLite Yes 1.0
SQL Server Compact Yes 1.0(3)
DB2 Yes 1.0
Firebird Yes 2.0
Jet(Microsoft Access) 2.0(3)
Azure Cosmos DB 3.0
메모리 내(테스트용) 1.0

1 일부 EF6 기능이 EF Core에서 구현되지 않습니다. 해당 기능은 EF6의 기본 EDM(엔터티 데이터 모델)을 사용하거나 투자 수익률이 비교적 낮은 복잡한 기능입니다. 항상 피드백을 환영하지만, EF Core는 EF6에서 가능하지 않은 많은 작업을 가능하게 하는 반면 EF Core가 EF6의 모든 기능을 지원할 가능성은 없습니다.

2 타사에서 구현하는 EF Core 데이터베이스 공급자는 EF Core의 새로운 주 버전으로 업데이트될 때 지연될 수 있습니다. 자세한 내용은 데이터베이스 공급자를 참조하세요.

3 SQL Server Compact 및 Jet 공급자는 .NET Core가 아닌 .NET Framework에서만 작동합니다.

지원되는 플랫폼

EF Core 3.1은 .NET Standard 2.0을 사용하여 .NET Core 및 .NET Framework에서 실행됩니다. 그러나 EF Core 5.0은 .NET Framework에서 실행되지 않습니다. 자세한 내용은 플랫폼을 참조하세요.

EF6.4는 멀티타기팅을 통해 .NET Core 및 .NET Framework에서 실행됩니다.

새 애플리케이션에 대한 지침

앱에 .NET Framework에서만 지원되는 항목이 필요하지 않은 한 .NET Core에서는 모든 새 애플리케이션용으로 EF Core를 사용합니다.

기존 EF6 애플리케이션에 대한 지침

EF Core는 EF6을 즉시 대체하지 않습니다. EF6에서 EF Core로 이동하는 경우 애플리케이션을 변경해야 할 수 있습니다.

EF6 앱을 .NET Core로 이동하는 경우:

  • 데이터 액세스 코드가 안정적이며 개선 가능성이 없거나 새로운 기능이 필요하지 않을 경우 EF6를 계속 사용합니다.
  • 데이터 액세스 코드가 개선되거나 앱에 EF Core에서만 제공하는 새로운 기능이 필요한 경우 EF Core로 포팅합니다.
  • 종종 성능을 위해서도 EF Core로 포팅합니다. 그러나 일부 시나리오는 더 빠르지 않으므로 일부 프로파일링을 먼저 수행합니다.

자세한 내용은 EF6에서 EF Core로 포팅을 참조하세요.