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 |
|---|---|---|
| 기본 클래스 매핑 | 예 | 1.0 |
| 매개 변수가 있는 생성자 | 2.1 | |
| 속성 값 변환 | 2.1 | |
| 키가 없는 매핑된 형식 | 2.1 | |
| Conventions | 예 | 1.0 |
| 사용자 지정 규칙 | 예 | 7.0 |
| 데이터 주석 | 예 | 1.0 |
| 플루언트 API | 예 | 1.0 |
| 상속: 계층당 테이블(TPH) | 예 | 1.0 |
| 상속: 유형별 테이블(TPT) | 예 | 5.0 |
| 상속: 구현된 클래스당 테이블 (TPC) | 예 | 7.0 |
| 그림자 상태 속성 | 1.0 | |
| 대체 키 | 1.0 | |
| 다대다 탐색 | 예 | 5.0 |
| 조인 엔터티 없이 다대다 관계 | 예 | 5.0 |
| 키 생성: 데이터베이스 | 예 | 1.0 |
| 키 생성: 클라이언트 | 1.0 | |
| 복합/소유 형식 | 예 | 2.0 |
| 공간 데이터 | 예 | 2.2 |
| 모델 형식: 코드 | 예 | 1.0 |
| 데이터베이스에서 모델 만들기: 명령줄 | 예 | 1.0 |
| 데이터베이스에서 모델 업데이트 | Partial | 백로그에 등록된(#831) |
| 전역 질의 필터 | 2.0 | |
| 테이블 분할 | 예 | 2.0 |
| 개체 분할 | 예 | 7.0 |
| 데이터베이스 스칼라 함수 매핑 | 불량 | 2.0 |
| 데이터베이스 테이블 값 함수 매핑 | 불량 | 5.0 |
| 필드 매핑 | 1.1 | |
| Nullable 참조 형식(C# 8.0) | 3.0 | |
| 모델의 그래픽 시각화 | 예 | 계획된 지원 없음 (1) |
| 그래픽 모델 편집기 | 예 | 계획된 지원 없음 (1) |
| 모델 형식: EDMX(XML) | 예 | 계획된 지원 없음 (1) |
| 데이터베이스에서 모델 만들기: VS 마법사 | 예 | 계획된 지원 없음 (1) |
데이터 쿼리
| 특징 | EF6.4 | EF Core |
|---|---|---|
| LINQ 쿼리 | 예 | 1.0 |
| 읽기 가능한 생성된 SQL | 불량 | 1.0 |
| GroupBy 번역 | 예 | 2.1 |
| 관련 데이터 로드: Eager | 예 | 1.0 |
| 관련 데이터 로드: 파생 형식에 대한 즉시 로드 | 2.1 | |
| 관련 데이터 로드: 지연 | 예 | 2.1 |
| 관련 데이터 로드: 명시적 | 예 | 1.1 |
| 원시 SQL 쿼리: 엔터티 형식 | 예 | 1.0 |
| 원시 SQL 쿼리: 키 없는 엔터티 형식 | 예 | 2.1 |
| 원시 SQL 쿼리: LINQ를 사용하여 작성 | 1.0 | |
| 명시적으로 컴파일된 쿼리 | 불량 | 2.0 |
| await foreach(C# 8.0) | 3.0 | |
| 텍스트 기반 쿼리 언어(Entity SQL) | 예 | 계획된 지원 없음 (1) |
데이터 저장
| 특징 | EF6.4 | EF Core |
|---|---|---|
| 변경 내용 추적: 스냅샷 | 예 | 1.0 |
| 변경 내용 추적: 알림 | 예 | 1.0 |
| 변경 내용 추적: 프록시 | 예 | 5.0 |
| 추적된 상태 액세스 | 예 | 1.0 |
| 낙관적 동시성 | 예 | 1.0 |
| Transactions | 예 | 1.0 |
| 명령문 일괄 처리 | 1.0 | |
| 저장 프로시저 매핑 | 예 | 7.0 |
| 연결이 끊긴 그래프 하위 수준 API | 불량 | 1.0 |
| 연결이 끊긴 그래프 종단 간 | 1.0(부분; #5536) |
기타 기능
| 특징 | EF6.4 | EF Core |
|---|---|---|
| Migrations | 예 | 1.0 |
| 데이터베이스 만들기/삭제 API | 예 | 1.0 |
| 시드 데이터 | 예 | 2.1 |
| 연결 복원력 | 예 | 1.1 |
| 인터셉터 | 예 | 3.0 |
| Events | 예 | 3.0(부분; #626) |
| 단순 로깅(Database.Log) | 예 | 5.0 |
| DbContext 풀링 | 2.0 |
데이터베이스 공급자 (2)
| 특징 | EF6.4 | EF Core |
|---|---|---|
| SQL Server | 예 | 1.0 |
| MySQL | 예 | 1.0 |
| PostgreSQL | 예 | 1.0 |
| Oracle | 예 | 1.0 |
| SQLite | 예 | 1.0 |
| SQL Server Compact | 예 | 1.0 (3) |
| DB2 | 예 | 1.0 |
| Firebird | 예 | 2.0 |
| Jet(Microsoft Access) | 2.0 (3) | |
| Azure Cosmos DB (애저 코스모스 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로 포팅을 참조하세요.
.NET