Für den SQL Server-Anbieter in Entity Framework Core spezifische Spaltenfeatures

Auf dieser Seite werden Optionen zur Spaltenkonfiguration im Detail beschrieben, die speziell für SQL Server-Anbieter vorgesehen sind.

Unicode und UTF-8

SQL Server 2019 führte eingeführte UTF-8--Unterstützung ein, die das Speichern von UTF-8-Daten in char und varchar Spalten ermöglicht, indem sie mit speziellen UTF-8-Sortierungen konfiguriert werden. EF Core 7.0 hat die vollständige Unterstützung für die Zuordnung zu UTF-8-Spalten eingeführt, und es ist möglich, sie auch in früheren EF-Versionen mit einigen zusätzlichen Schritten zu verwenden.

EF Core 7.0 enthält erstklassige Unterstützung für UTF-8-Spalten. Um sie zu konfigurieren, setzen Sie den Typ der Spalte einfach auf char oder varchar, geben Sie eine UTF-8-Sortierreihenfolge (mit der Endung _UTF8) an und geben Sie an, dass die Spalte Unicode sein soll:

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();
}

Sparsespalten

Spalten mit geringer Dichte sind normale Spalten, die einen optimierten Speicher für Nullwerte aufweisen, wodurch die Speicherplatzanforderungen für Nullwerte reduziert werden, um mehr Aufwand zum Abrufen von Nicht-Null-Werten zu erzielen.

Betrachten wir als Beispiel eine Typenhierarchie, die über die Strategie Tabelle-per-Hierarchie (TPH) abgebildet wird. In TPH wird eine einzige Datenbanktabelle verwendet, um alle Typen in einer Hierarchie zu speichern. Das bedeutet, dass die Tabelle Spalten für jede einzelne Eigenschaft in der gesamten Hierarchie enthalten muss, und für Spalten, die zu seltenen Typen gehören, werden die meisten Zeilen einen Nullwert für diese Spalte enthalten. In diesen Fällen kann es sinnvoll sein, die Spalte als von geringer Dichtezu konfigurieren, um die Platzanforderungen zu verringern. Die Entscheidung, ob eine Spalte von geringer Dichte sein soll, muss vom Benutzer getroffen werden und hängt von den Erwartungen an die tatsächlichen Daten in der Tabelle ab.

Eine Spalte kann über die Fluent-API mit geringer Dichte erstellt werden:

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

Weitere Informationen zu Spalten mit geringer Dichte finden Sie in der SQL Server-Dokumentation.