Entity Framework Core SQL Server プロバイダー固有の列機能

このページでは、SQL Server プロバイダーに固有の列の構成オプションについて説明します。

Unicode と UTF-8

SQL Server 2019 では、UTF-8 のサポートが導入されました。これにより、UTF-8 データを特殊な UTF-8 照合順序で構成することで、char および varchar 列に格納できます。 EF Core 7.0 では、UTF-8 列へのマッピングの完全なサポートが導入されました。いくつかの追加の手順を行えば、以前の EF バージョンでも使用できます。

EF Core 7.0 には、UTF-8 列に対する最高レベルのサポートが含まれています。 それらを構成するには、単に列の型を char または varchar に構成し、UTF-8 照合順序 (_UTF8 で終わる) を指定し、列を Unicode にする必要があることを指定するだけです。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .Property(b => b.Name)
        .HasColumnType("varchar(max)")
        .UseCollation("LATIN1_GENERAL_100_CI_AS_SC_UTF8")
        .IsUnicode();
}

スパース列

スパース列は、NULL 値用に最適化されたストレージがある通常の列です。これにより、NULL 以外の値を取得するためのオーバーヘッドは増加しますが、NULL 値の領域要件は削減されます。

例として、Table-Per-Hierarchy (TPH) ストラテジによってマップされる型階層について考えてみましょう。 TPH では、1 つのデータベース テーブルを使用して、階層内のすべての型が保持されます。つまり、テーブルには、階層全体のすべてのプロパティの列を含める必要があります。そして、まれな型に属する列の場合、ほとんどの行にはその列の NULL 値が含まれます。 このようなケースでは、領域の要件を減らすために、列を "スパース" として構成することが適している場合があります。 列をスパースにするかどうかの判断は、ユーザーが行う必要があり、テーブル内の実際のデータに関する予測に応じて決まります。

列をスパースにするには、Fluent API を使用します。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<RareBlog>()
        .Property(b => b.RareProperty)
        .IsSparse();
}

スパース列の詳細については、SQL Server に関するドキュメントを参照してください。