Funzionalità di colonna specifiche del provider SQL Server di Entity Framework Core

In questa pagina vengono fornite informazioni dettagliate sulle opzioni di configurazione della colonna specifiche del provider SQL Server.

Unicode e UTF-8

SQL Server 2019 ha introdotto il supporto UTF-8 , che consente di archiviare dati UTF-8 in char e varchar colonne configurandoli con regole di confronto UTF-8 speciali. EF Core 7.0 ha introdotto il supporto completo per il mapping alle colonne UTF-8 ed è possibile usarli anche nelle versioni precedenti di Entity Framework, con alcuni passaggi aggiuntivi.

EF Core 7.0 include il supporto di prima classe per le colonne UTF-8. Per configurarle, è sufficiente configurare il tipo di colonna in char o varchar, specificare regole di confronto UTF-8 (che terminano con _UTF8) e specificare che la colonna deve essere 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();
}

Colonne di tipo sparse

Le colonne di tipo sparse sono colonne normali con un'archiviazione ottimizzata per i valori Null, riducendo i requisiti di spazio per i valori Null a costo di un sovraccarico maggiore per recuperare valori non Null.

Si consideri ad esempio una gerarchia di tipi mappata tramite la strategia TPH (Table-Per-Hierarchy). In TPH viene usata una singola tabella di database per contenere tutti i tipi in una gerarchia; Ciò significa che la tabella deve contenere colonne per ogni proprietà nell'intera gerarchia e per le colonne appartenenti a tipi rari, la maggior parte delle righe conterrà un valore Null per tale colonna. In questi casi, può essere opportuno configurare la colonna come sparse per ridurre i requisiti di spazio. La decisione se creare una colonna di tipo sparse deve essere presa dall'utente e dipende dalle aspettative per i dati effettivi nella tabella.

Una colonna può essere resa di tipo sparse tramite l'API Fluent:

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

Per altre informazioni sulle colonne di tipo sparse, vedere la documentazione di SQL Server.