EF Core と EF6 を比較する
EF Core
Entity Framework Core (EF Core) は、.NET 用の最新のオブジェクト データベース マッパーです。 LINQ クエリ、変更の追跡、更新、スキーマの移行がサポートされています。
EF Core は、データベース プロバイダーのプラグイン モデルを使用して、SQL Server または Azure SQL Database、SQLite、Azure Cosmos DB、MySQL、PostgreSQL、その他多くのデータベースと連携します。
EF6
Entity Framework 6 (EF6) は、.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 | |
規約 | はい | 1.0 |
カスタム規約 | はい | 7.0 |
データの注釈 | はい | 1.0 |
Fluent API | はい | 1.0 |
継承: Table-Per-Hierarchy (TPH) | はい | 1.0 |
継承: Table-Per-Type (TPT) | はい | 5.0 |
継承: Table-Per-Concrete-Class (TPC) | はい | 7.0 |
シャドウ状態プロパティ | 1.0 | |
代替キー | 1.0 | |
多対多ナビゲーション | はい | 5.0 |
結合エンティティなしの多対多 | はい | 5.0 |
キーの生成: データベース | はい | 1.0 |
キーの生成: クライアント | 1.0 | |
複合/所有型 | はい | 2.0 |
空間データ | はい | 2.2 |
モデルの形式: コード | はい | 1.0 |
データベースからモデルを作成: コマンドライン | はい | 1.0 |
データベースからモデルを更新 | 一部完了 | バックログ (#831) |
グローバル クエリ フィルター | 2.0 | |
テーブル分割 | はい | 2.0 |
エンティティ分割 | はい | 7.0 |
データベース スカラー関数マッピング | 悪い | 2.0 |
データベース テーブル値関数のマッピング | 悪い | 5.0 |
フィールド マッピング | 1.1 | |
Null 許容参照型 (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 |
関連データの読み込み: 一括 | はい | 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 |
トランザクション | はい | 1.0 |
ステートメントのバッチ処理 | 1.0 | |
ストアド プロシージャ マッピング | はい | 7.0 |
切断されたグラフの下位 API | 悪い | 1.0 |
切断されたグラフのエンド ツー エンド | 1.0 (一部、#5536) |
その他の機能
機能 | EF6.4 | EF Core |
---|---|---|
移行 | はい | 1.0 |
データベース作成/削除 API | はい | 1.0 |
シード データ | はい | 2.1 |
接続の弾力性 | はい | 1.1 |
インターセプター | はい | 3.0 |
イベント | はい | 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 | 3.0 | |
インメモリ (テスト用) | 1.0 |
1 一部の EF6 機能は EF Core に実装されません。 これらの機能は、EF6 の基になる Entity Data Model (EDM) に依存しているか、または投資収益率が比較的低い、複雑な機能であるかのいずれかです。 Microsoft は常にフィードバックをお待ちしていますが、EF Core では EF6 でできない多くのことを可能にする一方、EF6 のすべての機能をサポートすることは、EF Core では逆に実行不可能です。
2 サード パーティによって実装されている EF Core データベース プロバイダーは、EF Core の新しいメジャー バージョンへの更新に遅れが生じる可能性があります。 詳しくは、「データベース プロバイダー」をご覧ください。
3 SQL Server Compact および Jet プロバイダーは、.NET Framework (.NET Core ではない) のみに対応しています。
サポートされているプラットフォーム
EF Core 3.1 は .NET Standard 2.0 を使用して、.NET Core と .NET Framework で実行されます。 ただし、EF Core 5.0 は .NET Framework では実行されません。 詳細については、プラットフォームに関するページを参照してください。
EF 6.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 への移植は、パフォーマンスのために行われることも多いです。 しかし、すべてのシナリオで速くなるわけではないため、最初にプロファイルを実行してください。
詳細については、「Porting from EF6 to EF Core (EF6 から EF Core への移植)」をご覧ください。
.NET