2023年11月にリリース予定のEntity Framework Core 8は、EF Core 7からさらに新機能と改良を加えている。注目すべき機能としてはマッピングされていない型に対する生のSQLクエリのサポート、遅延読み込みの改善、TimeOnlyおよびDateOnly SQL Serverデータ型のサポートがあげられる。
EF7では、スカラー型に対するRaw SQLクエリが導入されたが、EF8ではRaw SQLクエリがEntity Frameworkモデルに含まれないマッピング可能なCLR型を返せるようになった。この方法で実行されるクエリは、パラメータ化されたコンストラクタやマッピング属性などのEntity Framework機能をサポートしている。注目すべきは、マッピングされていないモデルは外部キーを定義できないため、そうでない型とモデル内の他の型との間の関係はサポートされていないところだ。
SQLのビューや関数もこの方法で問い合わせ可能で、テーブルと同じように任意のCLRタイプにマッピングできる。
Entity Framework 8 では、追跡されていないクエリにおけるナビゲーションプロパティの遅延読み込みのサポートが追加された。追跡されていないクエリの遅延読み込みプロパティは、プロキシの有無にかかわらず、遅延読み込みに対応している。
しかし、この方法にはいくつかの注意点がある。遅延読み込みは、追跡禁止クエリの実行に使用されたDbContextが廃棄されるまでしか機能しない。また、DbContextから切り離されたエンティティに対しても、DbContextから切り離されたエンティティに対しても遅延読み込みは機能しない。さらに、ナビゲーション・プロパティに非同期でアクセスする方法がないため、遅延読み込みは常に同期I/Oを使用することになる。
EF6アプリケーションでは、ナビゲーション・プロパティにvirtualキーワードがない場合、遅延読み込み機能が暗示的に実行されず、バグが発生する事態があった。
EF Coreでは、このバグを回避するためにナビゲーションプロパティに仮想キーワードが存在しない場合はプロキシは例外をスローする。この新しいEF Coreの動作のため、EF Core 8では、そのような方法で読み込むように明示的に設定した特定のナビゲーション・プロパティのみを読み込むために使用できるオプトアウト機能が導入されている。
EF Core 8 for SQL Serverでは、DateOnly(日付型カラムへのマッピング)とTimeOnly(時間型カラムへのマッピング)のデータ型がネイティブでサポートされるようになった。これまで(EF Core 6および7では)、これらの型を使用するにはコミュニティのNuGetパッケージのインストールが必要だったが、EF8では、この2つの新しい型は、SQL JSONカラムでも可能となった。
中程度のインパクトのある変更点は、この型にも関連している。EFの以前のバージョンでは、日付と時間の列の型はそれぞれDateTimeとTimeSpan型としてscaffoldされている.EF8では、代わりに新しい型であるDateOnlyとTimeOnlyにマッピングされる。これはデータベースファーストのアプローチを使用し、コードモデルを定期的に、再びscaffoldするユーザーにのみ影響するものである。この変更の影響を受けるユーザーには、緩和策を用意している。
EF8の計画については、Microsoftの公式ソースから読める。また、EF Core GitHubの課題ページでは実装を望む機能に投票可能だ。
2023年2月21日にリリースされたEF Core 8の最新プレビューは、NuGetパッケージとしてダウンロードでき、NET 6と.NET 7のプロジェクトに対応している。