Функции столбцов, относящиеся к поставщику SQL Server Entity Framework Core

На этой странице описаны параметры конфигурации столбцов, относящиеся к поставщику SQL Server.

Юникод и UTF-8

В SQL Server 2019 появилась поддержка UTF-8, которая позволяет хранить данные UTF-8 в char столбцах и varchar настраивать их с помощью специальных параметров сортировки UTF-8. EF Core 7.0 представила полную поддержку сопоставления столбцов UTF-8, и их можно использовать в предыдущих версиях EF, а также с некоторыми дополнительными шагами.

EF Core 7.0 включает поддержку первого класса для столбцов UTF-8. Чтобы настроить их, просто настройте тип char столбца или varcharукажите параметры сортировки UTF-8 (заканчивающиеся _UTF8) и укажите, что столбец должен быть Юникодом:

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 для этого столбца. В таких случаях может потребоваться настроить столбец как разреженный, чтобы уменьшить требования к пространству. Решение о том, следует ли принимать разреженные столбцы пользователем, и зависит от ожиданий фактических данных в таблице.

Столбец можно сделать разреженным с помощью API Fluent:

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

Дополнительные сведения о разреженных столбцах см. в документации ПО SQL Server.