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 への移植)」をご覧ください。