EF Core 10 のハイライト
EF Core 10 は .NET 10 と同時にリリースされ、起動時間の圧縮と AI 向けベクトル検索という 2 方向の強化が入りました。本記事ではこの 2 機能を中心に、実装と運用のポイントを整理します。
1. Compiled Models の自動化
EF Core 6 で導入された Compiled Models は、EF Core 10 でついにビルド時に自動再生成されるようになりました。これまで dotnet ef dbcontext optimize を手動実行する運用が不要になります。
<!-- .csproj -->
<PropertyGroup>
<EFCompileModel>true</EFCompileModel>
</PropertyGroup>
この 1 行で、ビルド時に Compiled Model がソースジェネレーターにより出力されます。初回 DbContext 生成: 800ms → 70ms(50 エンティティ規模)という効果は EF Core 9 と同等ですが、CI 連携が劇的に楽になりました。
2. Vector Search(ベクトル検索)
EF Core 10 は Vector 型を標準サポートし、埋め込みベクトル(embedding)をエンティティのプロパティとして宣言できるようになりました。
public class Document
{
public int Id { get; set; }
public string Title { get; set; } = "";
[Vector(Dimensions = 1536)]
public float[] Embedding { get; set; } = [];
}
// 類似度検索(コサイン距離)
var similar = await db.Documents
.OrderBy(d => EF.Functions.VectorDistance(d.Embedding, queryEmbedding))
.Take(10)
.ToListAsync();
対応プロバイダー(SQL Server 2025、PostgreSQL + pgvector、Azure Cosmos DB)で RAG アプリケーションの DB レイヤがシンプルになります。
3. Complex Types の拡張
.NET 8 で試験導入された Complex Types が、EF Core 10 でコレクションとネスト対応まで進化しました。値オブジェクト(Value Object)の実装がぐっと素直になります。
public class Order
{
public int Id { get; set; }
public Address ShippingAddress { get; set; } = new();
public List<LineItem> Items { get; set; } = [];
}
public class Address { /* ComplexProperty として保存 */ }
public class LineItem { /* Owned Collection */ }
移行時の注意
- EF Core 9 からの移行はほぼ追加のみで、破壊的変更は限定的。
- Compiled Model の自動化を有効にする前に、ビルド成果物に生成コードが含まれるかを CI でアサートする。
- Vector Search は DB 側の機能にも依存するため、ターゲット DB のバージョンを確認。
まとめ
EF Core 10 は「起動の速さ」「AI 対応」という実務に直結する 2 軸で進化しました。.NET 10 への移行と同時に EF Core も上げるのが定石です。WithNext.NET では .NET + EF Core の移行アセスメントも承っています。
