EF Core 10 の新機能
EF Core 10 (EF10) は、EF Core 9 の後の次のリリースであり、2025 年 11 月にリリースされる予定です。
EF10 は、すべての最新の EF10 機能と API の調整を含む毎日のビルド として利用できます。 ここでのサンプルは、これらのデイリー ビルドを使用します。
ヒント
サンプルは、GitHub からサンプル コードをダウンロードすることで、実行してデバッグできます。 以下の各セクションは、そのセクションに固有のソース コードにリンクしています。
EF10 では、.NET 10 SDK をビルドする必要があり、.NET 10 ランタイムを実行する必要があります。 EF10 は以前の .NET バージョンでは実行されず、.NET Framework では実行されません。
アドバイス
"新機能" ドキュメントは、プレビューごとに更新されます。 すべてのサンプルは、通常、最新のプレビューに比較して数週間分の追加作業が完了しているEF10 のデイリービルドを使用するように設定されています。 新機能をテストする際は、古いデータに基づいてテストしないように、毎日のビルドを使用することを強くお勧めします。
LINQ と SQL の翻訳
その他のクエリの機能強化
- DateOnly.ToDateTime(timeOnly) の翻訳 (#35194, 投稿者: @mseada94).
- 複数の連続した
LIMIT
の最適化 (#35384) は @ranma42 の貢献によるものです。 ICollection<T>
でのCount
操作の使用の最適化 (#35381) は @ChrisJollyAU の貢献によるものです。
ExecuteUpdateAsync で、式以外の通常のラムダが受け入れられるようになりました
ExecuteUpdateAsync を使用して、データベース内の任意の更新操作を表すことができます。 以前のバージョンでは、データベース行に対して実行される変更は、式ツリー パラメーターを使用して提供されていました。これにより、これらの変更を動的にビルドすることは非常に困難になりました。 たとえば、ブログのビューを更新し、条件付きで名前も更新するとします。 setters 引数は式ツリーであるため、次のようなコードを記述する必要があります。
// Base setters - update the Views only
Expression<Func<SetPropertyCalls<Blog>, SetPropertyCalls<Blog>>> setters =
s => s.SetProperty(b => b.Views, 8);
// Conditionally add SetProperty(b => b.Name, "foo") to setters, based on the value of nameChanged
if (nameChanged)
{
var blogParameter = Expression.Parameter(typeof(Blog), "b");
setters = Expression.Lambda<Func<SetPropertyCalls<Blog>, SetPropertyCalls<Blog>>>(
Expression.Call(
instance: setters.Body,
methodName: nameof(SetPropertyCalls<Blog>.SetProperty),
typeArguments: [typeof(string)],
arguments:
[
Expression.Lambda<Func<Blog, string>>(Expression.Property(blogParameter, nameof(Blog.Name)), blogParameter),
Expression.Constant("foo")
]),
setters.Parameters);
}
await context.Blogs.ExecuteUpdateAsync(setters);
式ツリーを手動で作成することは複雑でエラーが発生しやすく、この一般的なシナリオはこれまでよりもはるかに困難になりました。 EF 10 以降では、代わりに次のコードを記述できるようになりました。
await context.Blogs.ExecuteUpdateAsync(s =>
{
s.SetProperty(b => b.Views, 8);
if (nameChanged)
{
s.SetProperty(b => b.Name, "foo");
}
});
@aradalvand に感謝します。この変更を提案し推進してくれたことに (#32018)。
.NET