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 |
| 継承: 階層ごとのテーブル (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 | |
| 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 |
| 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 |
| Interceptors | はい | 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 コンパクト | はい | 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 の基になるエンティティ データ モデル (EDM) に依存するか、比較的投資収益率が低い複雑な機能です。 フィードバックは常に歓迎しますが、EF Core では EF6 では不可能なことが多数ありますが、EF Core が EF6 のすべての機能をサポートすることは逆に不可能です。
サード パーティによって実装された 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 では実行されません。 詳細については、「 プラットフォーム」 を参照してください。
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