次の方法で共有


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
継承: 階層ごとのテーブル (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 への移植 」を参照してください。