Neu in .NET 6 [18]: Spaltenreihenfolge in Entity Framework Core

Der Dotnet-Doktor Holger Schwichtenberg  –  0 Kommentare

Entity Framework Core bietet seit Version 6.0 wieder die Option, die Reihenfolge der Spalten beim Anlegen von Tabellen anzugeben.

Im klassischen Entity Framework gab es die Möglichkeit, beim Forward Engineering eines Datenbankschema die Spaltenreihenfolge anzugeben. Entity Framework Core besitzt seit Version 6.0 wieder die Möglichkeit, die Reihenfolge der Spalten mit der Annotation [Column(Order=Zahl)] beziehungsweise HasColumnOrder() im Fluent-API in OnModelCreating() anzugeben. Details finden sich im zugehörige Issue auf GitHub.

Die Ordnungszahlen müssen nicht fortlaufend vergeben werden:

public class Person
{
[Column(Order = 1)]
public byte ID { get; set; }

[Column(Order = 20)]
public string Name { get; set; }

[Column(Order = 5)]
public string Vorname { get; set; }
}

In dem generierten Datenbankschema werden die drei Spalten dann in der Reihenfolge ID, Vorname und Name erscheinen.

Dabei ist keineswegs zwingend, allen Spalten eine explizite Reihenfolge zu geben. Spalten ohne explizite Reihenfolge werden am Ende einsortiert (siehe Dokumentation auf GitHub: "Unannotated properties go last").

Ohne Reihenfolgeangabe erscheinen die Spalten im Datenbankschema in der gleichen Reihenfolge wie die Properties im Code, nicht in der alphabetischen Reihenfolge. Das war zwischenzeitlich anders, wie ein weiterer Issue mit dem langen Titel "In EF6 we tried having column order match the order of properties in the class. The issue is that reflection can return a different order on different architectures." zeigt.

Allerdings wirken sich die Angaben nur auf die Reihenfolge der Properties im ursprünglichen Befehl CREATE TABLE beziehungsweise später ALTER TABLE. In einer späteren Datenbankschemamigration ergänzte Spalten landen immer hinter den bereits in der Datenbanktabelle bestehenden Spalten. Das ist kein Fehler von Entity Framework Core, sondern eine Grundeigenschaft von Microsofts SQL Server. Andere Datenbankmanagementsysteme bieten durchaus die explizite Spaltensortierung.