EF Core & EF6 비교Compare EF Core & EF6

EF CoreEF Core

EF Core(Entity Framework Core)는 .NET용 최신 개체 데이터베이스 매퍼입니다.Entity Framework Core (EF Core) is a modern object-database mapper for .NET. LINQ 쿼리, 변경 내용 추적, 업데이트 및 스키마 마이그레이션을 지원합니다.It supports LINQ queries, change tracking, updates, and schema migrations.

EF Core는 SQL Server/SQL Azure, SQLite, Azure Cosmos DB, MySQL, PostgreSQL에서 작동할 뿐 아니라 데이터베이스 공급자 플러그 인 모델을 통해 많은 데이터베이스에서 작동합니다.EF Core works with SQL Server/SQL Azure, SQLite, Azure Cosmos DB, MySQL, PostgreSQL, and many more databases through a database provider plugin model.

EF6EF6

EF6(Entity Framework 6)은 .NET Framework용으로 디자인된 개체 관계형 매퍼이나 .NET Core를 지원합니다.Entity Framework 6 (EF6) is an object-relational mapper designed for .NET Framework but with support for .NET Core. EF6은 안정적인 지원 제품이지만 더 이상 활발히 개발되고 있지 않습니다.EF6 is a stable, supported product, but is no longer being actively developed.

기능 비교Feature comparison

EF Core는 EF6에서 구현되지 않을 새로운 기능을 제공합니다.EF Core offers new features that won't be implemented in EF6. 그러나 일부 EF6 기능은 현재 EF Core에서 구현되지 않았습니다.However, not all EF6 features are currently implemented in EF Core.

다음 표에서는 EF Core 및 EF6에서 사용할 수 있는 기능을 비교합니다.The following tables compare the features available in EF Core and EF6. 이는 개략적인 비교로서, 모든 기능을 나열하거나 다른 EF 버전에 있는 동일한 기능 간의 차이를 설명하지는 않습니다.This is a high-level comparison and doesn't list every feature or explain differences between the same feature in different EF versions.

EF Core 열은 기능이 처음 나타나는 제품 버전을 나타냅니다.The EF Core column indicates the product version in which the feature first appeared.

모델 만들기Creating a model

기능Feature EF6.4EF6.4 EF CoreEF Core
기본 클래스 매핑Basic class mapping YesYes 1.01.0
매개 변수가 포함된 생성자Constructors with parameters 2.12.1
속성 값 변환Property value conversions 2.12.1
키가 없는 매핑된 형식Mapped types with no keys 2.12.1
규칙Conventions YesYes 1.01.0
사용자 지정 규칙Custom conventions YesYes 1.0(부분, #214)1.0 (partial; #214)
데이터 주석Data annotations YesYes 1.01.0
흐름 APIFluent API YesYes 1.01.0
상속: TPH(계층 구조별 테이블)Inheritance: Table per hierarchy (TPH) YesYes 1.01.0
상속: TPT(형식별 테이블)Inheritance: Table per type (TPT) YesYes 5.0용으로 계획됨(#2266)Planned for 5.0 (#2266)
상속: TPC(구체적인 클래스별 테이블)Inheritance: Table per concrete class (TPC) YesYes 5.0용 Stretch(#3170) (1)Stretch for 5.0 (#3170) (1)
섀도 상태 속성Shadow state properties 1.01.0
대체 키Alternate keys 1.01.0
다 대 다 탐색Many-to-many navigations YesYes 5.0용으로 계획됨(#19003)Planned for 5.0 (#19003)
조인 엔터티가 없는 다 대 다Many-to-many without join entity YesYes 백로그에서(#1368)On the backlog (#1368)
키 생성: 데이터베이스Key generation: Database YesYes 1.01.0
키 생성: 클라이언트Key generation: Client 1.01.0
복합/소유된 형식Complex/owned types YesYes 2.02.0
공간 데이터Spatial data YesYes 2.22.2
모델 형식: 코드Model format: Code YesYes 1.01.0
데이터베이스에서 모델 만들기: 명령줄Create model from database: Command line YesYes 1.01.0
데이터베이스에서 모델 업데이트Update model from database PartialPartial 백로그에서(#831)On the backlog (#831)
전역 쿼리 필터Global query filters 2.02.0
테이블 분할Table splitting YesYes 2.02.0
엔터티 분할Entity splitting YesYes 5.0용 Stretch(#620) (1)Stretch for 5.0 (#620) (1)
데이터베이스 스칼라 함수 매핑Database scalar function mapping 나쁨Poor 2.02.0
필드 매핑Field mapping 1.11.1
nullable 참조 형식(C# 8.0)Nullable reference types (C# 8.0) 3.03.0
모델의 그래픽 시각화Graphical visualization of model YesYes 지원 계획 없음 (2)No support planned (2)
그래픽 모델 편집기Graphical model editor YesYes 지원 계획 없음 (2)No support planned (2)
모델 형식: EDMX(XML)Model format: EDMX (XML) YesYes 지원 계획 없음 (2)No support planned (2)
데이터베이스에서 모델 만들기: VS 마법사Create model from database: VS wizard YesYes 지원 계획 없음 (2)No support planned (2)

데이터 쿼리Querying data

기능Feature EF6.4EF6.4 EF CoreEF Core
LINQ 쿼리LINQ queries YesYes 1.01.0
읽기 가능한 생성된 SQLReadable generated SQL 나쁨Poor 1.01.0
GroupBy 변환GroupBy translation YesYes 2.12.1
관련 데이터 로드: 즉시Loading related data: Eager YesYes 1.01.0
관련 데이터 로드: 파생된 형식에 즉시 로드Loading related data: Eager loading for derived types 2.12.1
관련 데이터 로드: 지연Loading related data: Lazy YesYes 2.12.1
관련 데이터 로드: 명시적Loading related data: Explicit YesYes 1.11.1
원시 SQL 쿼리: 엔터티 형식Raw SQL queries: Entity types YesYes 1.01.0
원시 SQL 쿼리: 키 없는 엔터티 형식Raw SQL queries: Keyless entity types YesYes 2.12.1
원시 SQL 쿼리: LINQ로 작성Raw SQL queries: Composing with LINQ 1.01.0
명시적으로 컴파일된 쿼리Explicitly compiled queries 나쁨Poor 2.02.0
await foreach(C# 8.0)await foreach (C# 8.0) 3.03.0
텍스트 기반 쿼리 언어(Entity SQL)Text-based query language (Entity SQL) YesYes 지원 계획 없음 (2)No support planned (2)

데이터 저장Saving data

기능Feature EF6.4EF6.4 EF CoreEF Core
변경 내용 추적: 스냅샷Change tracking: Snapshot YesYes 1.01.0
변경 내용 추적: 알림Change tracking: Notification YesYes 1.01.0
변경 내용 추적: 프록시Change tracking: Proxies YesYes 5.0용으로 병합됨(#10949)Merged for 5.0 (#10949)
추적된 상태 액세스Accessing tracked state YesYes 1.01.0
낙관적 동시성Optimistic concurrency YesYes 1.01.0
트랜잭션Transactions YesYes 1.01.0
문 일괄 처리Batching of statements 1.01.0
저장 프로시저 매핑Stored procedure mapping YesYes 백로그에서(#245)On the backlog (#245)
연결이 끊긴 그래프 하위 수준 APIDisconnected graph low-level APIs 나쁨Poor 1.01.0
연결이 끊긴 그래프 엔드투엔드Disconnected graph End-to-end 1.0(부분, #5536)1.0 (partial; #5536)

기타 기능Other features

기능Feature EF6.4EF6.4 EF CoreEF Core
마이그레이션Migrations YesYes 1.01.0
데이터베이스 만들기/삭제 APIDatabase creation/deletion APIs YesYes 1.01.0
시드 데이터Seed data YesYes 2.12.1
연결 복원력Connection resiliency YesYes 1.11.1
인터셉터Interceptors YesYes 3.03.0
이벤트Events YesYes 3.0(부분, #626)3.0 (partial; #626)
간단한 로깅(Database.Log)Simple Logging (Database.Log) YesYes 5.0용으로 병합됨(#1199)Merged for 5.0 (#1199)
DbContext 풀링DbContext pooling 2.02.0

데이터베이스 공급자 (3)Database providers (3)

기능Feature EF6.4EF6.4 EF CoreEF Core
SQL ServerSQL Server Yes 1.01.0
MySQLMySQL Yes 1.01.0
PostgreSQLPostgreSQL Yes 1.01.0
OracleOracle Yes 1.01.0
SQLiteSQLite YesYes 1.01.0
SQL Server CompactSQL Server Compact YesYes 1.0 (4)1.0 (4)
DB2DB2 YesYes 1.01.0
FirebirdFirebird YesYes 2.02.0
Jet(Microsoft Access)Jet (Microsoft Access) 2.0 (4)2.0 (4)
Azure Cosmos DBAzure Cosmos DB 3.03.0
메모리 내(테스트용)In-memory (for testing) 1.01.0

1 제공된 릴리스에 대해 Stretch 목표를 달성할 가능성이 없습니다.1 Stretch goals are not likely to be achieved for a given release. 그러나 제대로 작동하는 경우 끌어오기를 시도합니다.However, if things go well, then we will try to pull them in.

2 일부 EF6 기능이 EF Core에서 구현되지 않습니다.2 Some EF6 features will not be implemented in EF Core. 해당 기능은 EF6의 기본 EDM(엔터티 데이터 모델)을 사용하거나 투자 수익률이 비교적 낮은 복잡한 기능입니다.These features either depend on EF6's underlying Entity Data Model (EDM) and/or are complex features with relatively low return on investment. 항상 피드백을 환영하지만, EF Core는 EF6에서 가능하지 않은 많은 작업을 가능하게 하는 반면 EF Core가 EF6의 모든 기능을 지원할 가능성은 없습니다.We always welcome feedback, but while EF Core enables many things not possible in EF6, it is conversely not feasible for EF Core to support all the features of EF6.

3 타사에서 구현하는 EF Core 데이터베이스 공급자는 EF Core의 새로운 주 버전으로 업데이트될 때 지연될 수 있습니다.3 EF Core database providers implemented by third-parties may be delayed in updating to new major versions of EF Core. 자세한 내용은 데이터베이스 공급자를 참조하세요.See Database Providers for more information.

4 SQL Server Compact 및 Jet 공급자는 .NET Core가 아닌 .NET Framework에서만 작동합니다.4 The SQL Server Compact and Jet providers only work on .NET Framework (not on .NET Core).

지원되는 플랫폼Supported platforms

EF Core 3.1은 .NET Standard 2.0을 사용하여 .NET Core 및 .NET Framework에서 실행됩니다.EF Core 3.1 runs on .NET Core and .NET Framework, through the use of .NET Standard 2.0. 그러나 EF Core 5.0은 .NET Framework에서 실행되지 않습니다.However, EF Core 5.0 will not run on .NET Framework. 자세한 내용은 플랫폼을 참조하세요.See Platforms for more details.

EF6.4는 멀티타기팅을 통해 .NET Core 및 .NET Framework에서 실행됩니다.EF6.4 runs on .NET Core and .NET Framework, through multi-targeting.

새 애플리케이션에 대한 지침Guidance for new applications

앱에 .NET Framework에서만 지원되는 항목이 필요하지 않은 한 .NET Core에서는 모든 새 애플리케이션용으로 EF Core를 사용합니다.Use EF Core on .NET Core for all new applications unless the app needs something that is only supported on .NET Framework.

기존 EF6 애플리케이션에 대한 지침Guidance for existing EF6 applications

EF Core는 EF6을 즉시 대체하지 않습니다.EF Core is not a drop-in replacement for EF6. EF6에서 EF Core로 이동하는 경우 애플리케이션을 변경해야 할 수 있습니다.Moving from EF6 to EF Core will likely require changes to your application.

EF6 앱을 .NET Core로 이동하는 경우:When moving an EF6 app to .NET Core:

  • 데이터 액세스 코드가 안정적이며 개선 가능성이 없거나 새로운 기능이 필요하지 않을 경우 EF6를 계속 사용합니다.Keep using EF6 if the data access code is stable and not likely to evolve or need new features.
  • 데이터 액세스 코드가 개선되거나 앱에 EF Core에서만 제공하는 새로운 기능이 필요한 경우 EF Core로 포팅합니다.Port to EF Core if the data access code is evolving or if the app needs new features only available in EF Core.
  • 종종 성능을 위해서도 EF Core로 포팅합니다.Porting to EF Core is also often done for performance. 그러나 일부 시나리오는 더 빠르지 않으므로 일부 프로파일링을 먼저 수행합니다.However, not all scenarios are faster, so do some profiling first.

자세한 내용은 EF6에서 EF Core로 포팅을 참조하세요.See Porting from EF6 to EF Core for more information.