Entity Framework Core 8 の計画

EF8 Logo

計画プロセスで説明されているように、Entity Framework Core 8 (EF Core 8) および .NET 8 の時間枠でのその他の .NET Data Access 作業の計画には関係者からの意見が取り入れられています。 簡潔にするために、EF Core 8 は単に EF8 とも呼ばれます。

重要

この計画は確約ではありません。リリース全体を通して学習し続けるにつれて進化します。 現在、EF8 で計画されていない機能が盛り込まれる可能性があります。 現在、EF8 で計画されている機能が除外される可能性があります。

全般情報

EF Core 8 は、EF Core 7 に続く次のリリースであり、2023 年 11 月に .NET 8 と同時にリリースされる予定です。 EF Core 7.1 リリースの計画はありません。

サポートされているプラットフォーム

EF8 は現在.NET 6 を対象にしています。 これは、リリースが近くなった時点で .NET 8 に更新される可能性があります。 EF8 では、.NET Standard のどのバージョンも対象にしていません。詳細については、「.NET Standard の将来」を参照してください。 EF8 は、.NET Framework では実行されません。

EF8 は、長期的なサポート (LTS) リリースとして .NET 8 と連携します。 詳細については、.NET のサポート ポリシーに関するページをご覧ください。

重大な変更

EF Core と .NET プラットフォームの両方の機能強化が継続的に行われているため、EF8 に含まれる破壊的変更の数は多くありません。 当社の目標は、プラットフォームを停滞させることなく、破壊的変更を可能な限り最小限にすることです。

テーマ

EF8 と .NET 8 でのデータ アクセスに対する大規模な投資は、次のテーマに該当します。

  • 要求の多かった機能
  • クラウド ネイティブおよびデバイス
  • パフォーマンス
  • ビジュアル ツール
  • 開発者エクスペリエンス

次に、これらの各テーマについて詳しく説明します。 各テーマの状態の概要は、.NET Data Biweekly 更新で追跡できます。 フィードバックや提案については、GitHub Issue #26994 にコメントしてください。

テーマ: 要求の多かった機能

これまでと同じように、計画プロセスの基になっているものは主に、GitHub の機能への投票 (👍) です。 これらの投票とユーザー入力に基づいて、EF8 に対して次の要求の高い機能に取り組む予定です。

JSON 列

"area-json" と "consider-for-current-release" というラベルが付いた issue」によって追跡

価値提案: ドキュメント/リレーショナル ハイブリッド パターンをさらに強化するために、EF7 JSON サポートを基に構築します。

EF7 では、SQL SERVER JSON 列の EF モデルの集計型へのマッピングが導入されましたが、いくつかの制限があります。 EF8 では、これらの制限の多くに対処し、パフォーマンスをテストして向上させる予定です。 EF7 では、集計への JSON マッピングは SQL Server に限定されています。 EF8 では、SQLite にサポートを提供し、他のプロバイダーの所有者と協力して、すべてのプロバイダー間で JSON 列のサポートを調整する予定です。

値オブジェクト

Issue #9906: C# 構造体またはクラスを値オブジェクトとして使用する」によって追跡

価値提案: アプリケーションでは、EF モデルで DDD スタイルの値オブジェクトを使用できます。

以前は、集計のサポートを目的として、エンティティを所有するのはチーム ビューであり、値オブジェクトに対する妥当な近似でもありました。 経験上、そうではないことがわかりました。 そのため、EF8 では、ドメイン駆動設計での値オブジェクトのニーズに焦点を当てて、より優れたエクスペリエンスの導入が計画されています。 この方法は、所有エンティティではなく値コンバーターに基づいています。

マップされていない型の SQL クエリ

Issue #10753: 結果のエンティティ型を定義せずに生 SQL クエリをサポートする」によって追跡

価値提案: アプリケーションは、ADO.NET にドロップしたり、サードパーティ製ライブラリを使用したりすることなく、より多くの種類の SQL クエリを実行できます。

現在、SQL クエリは、モデルまたはスカラー型の型を返す必要があります。 EF8 では、EF モデルに含まれていない型を直接返す SQL クエリを許可する予定です。

テーマ: クラウド ネイティブおよびデバイス

EF Core は、従来の ASP.NET Core Web アプリケーションでよく使用されます。 ただし、EF Core はマイクロサービスやモバイル デバイスでますます使用されています。 これらの環境では、通常、より小さいアプリケーション サイズ、より高速な起動時間、動的なコード生成に依存しないことが好まれます。 EF7 の EF Core アプリのトリミングが大幅に改善され、EF8 のこれらの領域へのさらなる投資が計画されています。

EF Core を使用した AOT とトリミング

"area-aot" と "consider-for-current-release" というラベルが付いた issue」によって追跡

価値提案: 動的なコード生成を行わない、小規模で高速に起動される EF Core アプリケーション。

EF Core には、トリミングされた事前処理 (AOT) コンパイル済みアプリケーションにとっての課題であるいくつかの特性があります。

  • 命令型アプリケーション コードとリフレクションを使用して EF モデルとマッピングを検出する
  • リフレクションと動的に生成された型をクエリと変更追跡に使用する
  • 命令型に構築された任意の LINQ クエリ用に動的に生成されたコード

EF8 では、これらの領域を調査してプロトタイプを作成し、現在の EF Core ユーザー エクスペリエンスを維持する AOT とトリミングの方法を見つける予定です。

ADO.NET の AOT とトリミング

価値提案: 低レベルのデータ アクセスは、クラウド ネイティブ アプリケーションで使用できます。

EF Core などの高レベルのデータ アクセス テクノロジでは、Microsoft.Data.SqlClientMicrosoft.Data.Sqlite、および Npgsql などの ADO.NET データ プロバイダーが利用されます。 .NET 8 の場合は、PostgreSQL 用の Npgsql プロバイダーと SQLite 用の Microsoft.Data.Sqlite プロバイダーが、トリミングされた AOT コンパイル済みアプリケーションで完全に動作していることを確認します。 また、他の ADO.NET データ プロバイダーの作成者と連携して、AOT とトリミングをわかりやすくします。

テーマ: パフォーマンス

優れたパフォーマンスは、EF Core と下位レベルのデータ アクセスの両方を含むすべての .NET の基本です。 Woodstar (下記参照) は、.NET 8 の時間枠での主要なパフォーマンス プッシュになります。 ただし、前述のように、JSON 列など、他のいくつかの領域でもパフォーマンスに取り組む予定です。 さらに、AOT とトリミング (上記参照) の作業は、パフォーマンスと強い関係があります。

Woodstar

追跡: .NET Data Lab リポジトリで

価値提案: .NET アプリケーションの SQL Server と Azure SQL への高速でフル マネージドのアクセス。

Microsoft.Data.SqlClient は、SQL Server 用の完全な機能を備えた ADO.NET データベース プロバイダーです。 .NET と .NET Framework の両方で、広範な SQL Server 機能がサポートされています。 しかし、その動作間での多くの複雑なやり取りが含まれる、大規模で古いコードベースでもあります。 これにより、パイプラインなどの新しい .NET パフォーマンス機能を利用するのが困難になります。 また、修正が非常に難しいいくつかのパフォーマンスの issue (特に大きなデータの読み取りで) もあります。

.NET 8 の時間枠で、Woodstar に多額の投資を行う予定です。 当社の仮の目標は、リリースの終わりまでに Woodstar を使用して TechEmpower Fortunes ベンチマークを実行することです。

重要

Microsoft.Data.SqlClient への取り組みは変わりません。 EF Core であってもなくても、引き続き SQL Server と Azure SQL の両方に接続するための推奨される方法です。 新しく導入される SQL Server のフィーチャーは引き続きサポートされます。

テーマ: ビジュアル ツール

EF Core は、データベースの移行、リバース エンジニアリングなどの強力なクロスプラットフォーム コマンド ライン ツールを備えています。 さらに、EF Core Power Tools では、これらのビジュアル エクスペリエンスを提供します。 ただし、EF Core は、既定の Visual Studio UI エクスペリエンスには実質的に存在しません。 .NET 8 の時間枠で、EF Core ツールを Visual Studio エクスペリエンスの組み込み部分にする予定です。

Visual Studio のファーストクラスの T4 テンプレート

価値提案: Visual Studio の複数の領域で T4 テンプレートを活用します。

EF7 では、既存のデータベースから EF モデルをスキャフォールディング (リバース エンジニアリング) するための T4 テンプレートが導入されました。 ただし、適切なエディター エクスペリエンスがないと、T4 テンプレートの編集が困難になる場合があります。 .NET 8 の時間枠で、EF と他のテンプレートの両方で使用できるように、より優れた T4 編集エクスペリエンスを Visual Studio に提供する予定です。

Visual Studio での EF Core Database First

価値提案: Visual Studio のすぐに使用できる Database First ツール。

EF Core Power Tools では、EF Core ツールの優れたビジュアル エクスペリエンスを提供します。 ただし、Power Tools は Visual Studio にすぐにインストールされないため、探すのが困難な場合があります。 .NET 8 の時間枠で、Visual Studio で EF Core ツールを簡単に見つけられるようにする予定です。 この作業の主な焦点は、既存のデータベース ("Database First" と呼ばれる) から EF モデルをスキャフォールディング (リバース エンジニアリング) することですが、他の領域も含まれる場合があります。

テーマ: 開発者エクスペリエンス

開発者に優れたエクスペリエンスを作成することは、常にチームの主要な原動力でした。 上記のテーマのほとんどすべてが、何らかの方法でこれに関連しています。 さらに、EF8 で計画されている作業の大部分には、複数の領域にわたる小規模な開発者エクスペリエンスの向上が含まれます。

EF8 で取り組む可能性のあるすべての issue は、GitHub で "consider-for-current-release" ラベルによって追跡されます。 リリース全体でこれらの issue を再評価し、取り組みながら、issue を 8.0 マイルストーンに移行します。 取り組む issue を決定するときにこの情報を使用できるように、お客様にとって重要な issue (👍) に投票してください。

EF Core GitHub の issue はすべて、1 つ以上の "領域" に割り当てられます。 次のクエリでは、EF8 で検討されている issue を主な領域別にフィルター処理します。

推奨事項

計画に関するフィードバックは重要です。 計画に関するフィードバックや一般的な提案については、GitHub イシュー #29853 にコメントしてください。 issue の重要度を示す最善の方法は、GitHub でその issue に投票 (👍) することです。 このデータが、次のリリースの計画プロセスに取り込まれます。