特定于 Entity Framework Core SQL Server 提供程序的列功能

此页详细介绍了特定于 SQL Server 提供程序的列配置选项。

Unicode 和 UTF-8

SQL Server 2019 引入了引入了 UTF-8支持,允许通过配置 UTF-8 排序规则以将 UTF-8 数据存储在charvarchar列中。 EF Core 7.0 引入了对映射到 UTF-8 列的完全支持,并且还可以在之前的 EF 版本中使用这些列,并执行一些额外步骤。

EF Core 7.0 包括对 UTF-8 列的一流支持。 要对其进行配置,只需将列的类型配置为charvarchar,指定 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 值的开销更大。

例如,考虑通过“每个层次结构一张表”(TPH) 策略映射的类型层次结构。 在 TPH 中,单一数据库表用于保存层次结构中的所有类型;这意味着,表必须包含整个层次结构中每个属性的列,且对于属于稀有类型的列,大多数行将对这些列包含 NULL 值。 在这些情况下,为了减少空间需求,将列配置为“稀疏”可能是有意义的。 是否使列稀疏的决策必须由用户做出,并且取决于表中实际数据的预期。

可通过 Fluent API 使列变得稀疏:

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

有关稀疏列的信息,请参阅 SQL Server 文档