Entity Framework Core 6.0 の計画
重要
EF Core 6.0 がリリースされました。 このページは、プランの履歴レコードとして残ります。
計画プロセスで説明されているように、Entity Framework Core (EF Core) 6.0 リリースの計画には関係者からの意見が取り入れられています。 この計画は定期的に更新され、スケジュールとスコープの調整が反映されます。
これまでのリリースとは異なり、この計画では、6.0 リリースのすべての作業を対象にすることは予定されていません。 代わりに、このリリースで投資する場所と方法を示しますが、リリースの作業を行いながらフィードバックを集めて学習し、柔軟に新しい作業の範囲を調整したり作業に取り入れたりします。
重要
このプランは確約ではありません。 さらに学習して進化する出発点となります。 現在、6.0 で計画されていない機能が盛り込まれる可能性があります。 現在、6.0 で計画されている機能が除外される可能性があります。
全般情報
バージョン番号とリリース日
EF Core 6.0 は、5.0 EF Core に続く次のリリースであり、現時点では、2021 年 11 月に .NET 6 と同時にリリースされる予定です。
サポートされているプラットフォーム
EF Core 6.0 には .NET 6 が必要です。 EF Core 6.0 では、.NET Standard のどのバージョンも対象になっていません。詳細については、「.NET Standard の将来」を参照してください。
EF Core 6.0 は、.NET Framework では実行されません。
EF Core 6.0 は、長期的なサポート (LTS) リリースとして .NET 6 と連携します。
重大な変更
EF Core と .NET プラットフォームの両方の機能強化が継続的に行われているため、EF Core 6.0 に含まれる破壊的変更の数は多くありません。 目標は、アプリケーションの大部分を中断せずに更新できるようにすることです。
テーマ
EF Core 6.0 では、次の領域の基礎を形成するために大きな投資が注ぎ込まれます。
要求の多かった機能
これまでと同じように、計画プロセスの基になっているものは主に、GitHub でのフィーチャーへの投票 (👍) です。 EF Core 6.0 では、次のような要求の多かったフィーチャーについての作業が行われる予定です。
SQL Server のテンポラル テーブル
追跡: #4693
状態: 完了
T シャツのサイズ: L
テンポラル テーブルを使用すると、通常のテーブルのように格納された最新のデータのみに対してではなく、テーブルに格納された任意の時点のデータに対するクエリの実行をサポートします。 EF Core 6.0 の場合、Migrations によってテンポラル テーブルを作成できるだけでなく、LINQ クエリを使用してデータにアクセスすることもできます。
この作業の初期のスコープは、イシューで説明されています。 リリース時のフィードバックに基づいて、サポートが追加される可能性があります。
JSON 列
追跡: #4021
状態: 削除
T シャツのサイズ: M
この機能により、任意のデータベース プロバイダーによって実装できる JSON サポートのための一般的なメカニズムとパターンが導入されます。 コミュニティと協力して、Npgsql および Pomelo MySQL の既存の実装を調整し、SQL Server と SQLite のサポートも追加します。
ColumnAttribute.Order
追跡: #10059
状態: 進行中
T シャツのサイズ: S
この機能を使用すると、Migrations または EnsureCreated
でテーブルを作成するときに、列を任意の順序にすることができます。 既存のテーブルの列の順序を変更するには、テーブルを再構築する必要があることに注意してください。この機能のサポートは、EF Core のリリースでは予定されていません。
パフォーマンス
EF Core は一般に EF6 より高速ですが、パフォーマンスの大幅な向上が可能な領域がまだあります。 これらの領域のいくつかには EF Core 6.0 で取り組むことが計画されていますが、パフォーマンスのインフラストラクチャとテストも改善されています。
このテーマに関しては反復的な調査が何回も行われる予定であり、それによりリソースを集中させる場所が明らかになります。 最初は次の作業が計画されています。
パフォーマンス インフラストラクチャと新しいテスト
状態: スコープ/完了
T シャツのサイズ: M
EF Core のコードベースには、毎日実行されるパフォーマンス ベンチマークのセットが既に含まれています。 6.0 では、これらのテストのためのインフラストラクチャを強化し、新しいテストを追加することが計画されています。 また、メインラインのパフォーマンス シナリオのプロファイリングを行い、簡単に実行できるものを見つけて解決します。
更新: テスト インフラストラクチャが改善され、新しいテストが追加されて、EF Core 6 の作業がサポートされました。 この領域のその他の機能強化については、EF Core 6.0 リリースの範囲外です。
コンパイル済みモデル
追跡: #1906
状態: 完了
T シャツのサイズ: XL
コンパイル済みモデルを使用すると、EF モデルのコンパイル済み形式を生成できます。 これにより、起動パフォーマンスが向上すると共に、モデルにアクセスするときのパフォーマンスが一般に向上します。
TechEmpower の Fortunes
追跡: #23611
状態: 完了
T シャツのサイズ: XL
何年も、業界標準の TechEmpower ベンチマークを .NET 上で PostgreSQL データベースに対して実行してきました。 Fortunes ベンチマークは、EF のシナリオに特に関連しています。 このベンチマークには、次のようなさまざまなバリエーションがあります。
- ADO.NET を直接使用する実装。 これは、ここで示す 3 つのものの中で最も速い実装です。
- Dapper を使用する実装。 これは ADO.NET を直接使用するより遅くなりますが、それでも高速です。
- EF Core を使用する実装。 現在、これは 3 つの中で最も遅い実装です。
EF Core 6.0 の目標は、EF Core のパフォーマンスを TechEmpower Fortunes ベンチマークでの Dapper のパフォーマンスと匹敵するものにすることです。 (これは簡単なことではありませんが、できるだけ近付けるように最善を尽くします)。
リンカー/AOT
追跡: #10963
状態: スコープ/完了
T シャツのサイズ: M
EF Core では、大量のランタイム コードの生成が実行されます。 これは、Xamarin や Blazor のようなリンカー ツリーのシェイキングに依存するアプリ モデルや、iOS のような動的コンパイルを実行できないプラットフォームでは課題になっています。 EF Core 6.0 の一部としてこの領域の調査を続け、可能な限り改善目標を達成します。 ただし、6.0 の期間内にギャップが完全に埋まることは期待していません。
移行と展開
EF Core 5.0 で行われた調査から継続して、移行の管理とデータベースの展開に関するサポートを強化することを計画しています。 これに関しては、2 つの主要な領域があります。
移行バンドル
追跡: #19693
状態: 完了
T シャツのサイズ: M
移行バンドルは、運用データベースに移行を適用する自己完結型の実行可能ファイルです。 その動作は dotnet ef database update
と同じですが、必要なものがすべて 1 つの実行可能ファイルに含まれているため、SSH、Docker、PowerShell の展開がはるかに簡単になるはずです。
移行の管理
追跡: #22945
状態: 削除
T シャツのサイズ: L
1 つのアプリケーションに対して作成される移行の数が増加して負担になる可能性があります。 また、これらの移行は、必要ない場合でも、アプリケーションと共に展開されることがよくあります。 EF Core 6.0 では、ツールおよびプロジェクトとアセンブリの管理の向上により、これを改善する予定です。 対応を予定している特定の 2 つのイシューは、多くの移行を 1 つにまとめることと、クリーンなモデルのスナップショットを再生成することです。
更新: リソースの制約により、6.0 では、この領域の作業のほとんどが削除されました。
既存のフィーチャーの改善とバグの修正
6.0.0 のマイルストーンに割り当てられているイシューまたはバグは、現在、このリリースで計画されています。 これには、多くの小さな機能強化とバグ修正が含まれます。
EF6 のクエリのパリティ
追跡: "ef6-parity" というラベルが付けられていて 6.0 のマイルストーンに含まれるイシュー
状態: スコープ/完了
T シャツのサイズ: L
EF Core 5.0 の場合、EF6 でサポートされていないパターンに加えて、EF6 によってサポートされているほとんどのクエリ パターンがサポートされています。 EF Core 6.0 の場合は、ギャップを埋め、サポートされる EF Core クエリを、サポートされている EF6 クエリの真のスーパーセットにすることが計画されています。 これはギャップの調査によって進められますが、後に FirstOrDefault が続く GroupBy を変換するのような GroupBy のイシューや、プリミティブ型およびマップされていない型に対する生の SQL クエリが既に含まれています。
更新: プリミティブ型およびマップされていない型の生 SQL クエリは、リソーシングの制約と優先順位の調整により、6.0 から削除されています。
値オブジェクト
追跡: #9906
状態: 削除
T シャツのサイズ: M
以前は、集計のサポートを目的として、エンティティを所有するのはチーム ビューであり、値オブジェクトに対する妥当な近似でもありました。 経験上、そうではないことがわかりました。 そのため、EF Core 6.0 では、ドメイン駆動設計での値オブジェクトのニーズに焦点を当てて、より優れたエクスペリエンスの導入が計画されています。 この方法は、所有エンティティではなく値コンバーターに基づいています。
この作業の最初の対象は、複数の列にマップする値コンバーターを可能にすることです。 リリース時のフィードバックに基づいて、サポートが追加される可能性があります。
Azure Cosmos DB データベース プロバイダー
追跡: "area-cosmos" というラベルが付けられていて 6.0 のマイルストーンに含まれるイシュー
状態: 展開/完了
T シャツのサイズ: L
EF Core 6.0 で Azure Cosmos DB プロバイダーに対して行う機能強化に関するフィードバックの収集が積極的に行われています。 情報が増えたらこのドキュメントを更新します。 現時点では、必要な Azure Cosmos DB のフィーチャーに投票 (👍) してください。
更新: Azure Cosmos DB プロバイダーに関連する広範な顧客開発が行われています。 これにより、次の機能強化が 6.0 EF Core に取り込まれています。
- Azure Cosmos DB プロバイダーは、既定で、暗黙の所有権に設定される
- 結合エンティティ型のパーティション キーが慣例により設定される
- FromSql のサポート
- エンティティ/エンティティの型/コレクションごとに TTL を構成する
- コンテナー ファセット (スループット、サイズ、パーティション キーなど) を構成する API
- 統計 (クエリ コスト、アクティビティ ID) を含む診断イベント
- クエリ内の Distinct 演算子
- 組み込み関数にマップされるメンバー/メソッドのトランスレーターを追加する
- プリミティブ型のコレクションとディクショナリの基本的なサポートを追加する
更新: 次の問題が 6.0 リリースから削除されました。
- エンティティにエンティティが埋め込まれていると、Find/FindAsync により SQL API クエリが実行される
- ReadItem を使用できる、より多くのクエリを最適化する
- より多くのクエリでパーティション キー フィルターを検出する
- フィルター条件でサブクエリを変換する
- CUD 操作の整合性レベルの指定を許可する
- 集計演算子のサポート
モデル構築規則をアプリケーションに公開する
追跡: #214
状態: 削除
T シャツのサイズ: M
EF Core では、.NET 型からモデルを構築するために規則のセットが使用されます。 これらの規則は、現在、データベース プロバイダーによって制御されています。 EF Core 6.0 では、アプリケーションでこれらの規則に接続して変更できるようにする予定です。
残バグ ゼロ (ZBB)
追跡: 6.0 のマイルストーンで type-bug
というラベルが付けられているイシュー
状態: 進行中/スコープ
T シャツのサイズ: L
EF Core 6.0 の期間中に、すべての未解決バグを修正することを計画しています。 いくつかの留意事項:
- これは、特に type-bug というラベルが付いているイシューに当てはまります。
- バグを適切に修正するために設計の変更や新しい機能が必要になる場合など、例外があります。 そのようなイシューは、
blocked
というラベルでマークされます。 - GA/RTM リリースに近付いたら一般に行われるように、必要な場合はリスクに基づいてバグをそのままにします。
その他の機能
追跡: 6.0 のマイルストーンで type-enhancement
というラベルが付けられているイシュー
状態: 完了
T シャツのサイズ: L
EF 6.0 では他に次のようなフィーチャーが計画されていますが、これらに限定されません。
- 非ナビゲーション コレクションに対するクエリを分割する
- リバース エンジニアリングで単純な結合テーブルを検出し、多対多リレーションシップを作成する
- モデル内の特定の型のプロパティに既定の変換を指定するためのメカニズムと API
更新: 次の問題が 6.0 リリースから削除されました。
.NET 統合
EF Core チームは、関連性はあるが独立した複数のテクノロジについての作業も行っています。 具体的には、以下の作業が予定されています。
System.Data の機能強化
追跡: 6.0 のマイルストーンで area-System.Data
というラベルが付けられている dotnet\runtime リポジトリのイシュー
状態: スコープ/完了
T シャツのサイズ: L
この作業には次のものが含まれます。
- 新しいバッチ処理 API の実装。
- ADO.NET の理解と進化のための、他の .NET チームやコミュニティとの継続的な連携。
更新: 次の問題が 6.0 リリースから削除されました。
Microsoft.Data.Sqlite の機能強化
追跡: 6.0 のマイルストーンで type-enhancement
および area-adonet-sqlite
というラベルが付けられているイシュー
状態: スコープ/完了
T シャツのサイズ: M
パフォーマンスのための接続プールや準備されたステートメントなど、Microsoft.Data.Sqlite に関していくつかの小さな改良が計画されています。
更新: 準備されたステートメントが 6.0 リリースから削除されました。
Null 許容参照型
追跡: #14150
状態: 完了
T シャツのサイズ: L
null 許容参照型を使用するために EF Core コードに注釈を付けます。
実験と調査
EF チームは、EF Core 6.0 の期間中に、2 つの領域での実験と調査に時間を費やすことを計画しています。 これは学習プロセスであるため、6.0 リリースでは具体的な成果物は計画されていません。
SqlServer.Core
状態: 進行中
Tシャツのサイズ: 進行中
Microsoft.Data.SqlClient は、SQL Server 用の完全な機能を備えた ADO.NET データベース プロバイダーです。 .NET Core と .NET Framework の両方で、広範な SQL Server 機能がサポートされています。 しかし、その動作間での多くの複雑なやり取りが含まれる、大規模で古いコードベースでもあります。 そのため、新しい .NET Core フィーチャーを使用することにより得られる可能性がある利点を調査するのが難しくなっています。 したがって、.NET 用の高パフォーマンス SQL Server ドライバーの可能性を判断するための実験を、コミュニティと協力して開始しています。
重要
Microsoft.Data.SqlClient への取り組みは変わりません。 EF Core であってもなくても、引き続き SQL Server と SQL Azure の両方に接続するための推奨される方法です。 新しく導入される SQL Server のフィーチャーは引き続きサポートされます。
GraphQL
状態: 進行中
Tシャツのサイズ: 進行中
GraphQL は、過去数年間にさまざまなプラットフォームで広く使用されるようになっています。 これに関する調査を行い、.NET でのエクスペリエンスを向上させる方法を見つけることを計画しています。 これには、既存のエコシステムを理解してサポートするためのコミュニティとの連携が含まれます。 また、既存の作業への貢献の形式や、Microsoft スタックでの無償要素の開発での、Microsoft による具体的な取り組みも含まれる場合があります。
DataVerse (旧称 Common Data Services)
状態: 進行中
Tシャツのサイズ: 進行中
DataVerse は、ビジネス アプリケーションを短期間で開発できるように設計された列ベースのデータ ストアです。 バイナリ オブジェクト (BLOB) などの複雑なデータ型が自動的に処理され、組織や連絡先などの組み込みのエンティティとリレーションシップが用意されています。 SDK は存在しますが、EF Core プロバイダーを利用することで、開発者には高度な LINQ クエリの使用、作業単位の利用、一貫性のあるデータ アクセス API などのメリットがあります。 チームは、DataVerse に接続する .NET 開発者エクスペリエンスを向上させるためのさまざまな方法を検討します。
対象外
追跡: consider-for-current-release
というラベルが付けられている問題
これらは、現時点では 6.0 リリースで予定されていないバグ修正および機能強化ですが、リリース全体を通したフィードバックと上記の作業の進行状況に基づいて検討されます。 これらのイシューは、EF Core 6.0 に取り込まれ、自動的に次のリリースの候補になる可能性があります。
また、計画を立てるときは常に、最も投票が多かった問題が考慮されています。 これらの問題をリリースから切り捨てることは常に苦痛ですが、保有するリソースにとって現実的な計画を立てる必要があります。 必要なフィーチャーに投票 (👍) したことを確認してください。
推奨事項
計画に関するフィードバックは重要です。 イシューの重要度を示す最善の方法は、GitHub でそのイシューに投票 (👍) することです。 このデータが、次のリリースの計画プロセスに取り込まれます。
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示