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