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

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

Unicode と UTF-8

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

EF Core 7.0 には、UTF-8 列のファースト クラスのサポートが含まれています。 これらを構成するには、 または varcharに列の型をchar構成し、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 に関するドキュメントを参照してください。