EF Core 10 の Compiled Models と Vector Search — 起動高速化と AI 検索の両立
Database

EF Core 10 の Compiled Models と Vector Search — 起動高速化と AI 検索の両立

公開: 更新: 約2分で読めます

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 連携が劇的に楽になりました。

Compiled Model 有効化前後の初回 DbContext 生成時間比較(50 エンティティ規模)
50 エンティティの DbContext で初回生成は 800ms から約 70ms まで短縮。コールドスタートの多いサーバレスでこそ効く。

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 の移行アセスメントも承っています。