Ich versuche, einen mehrspaltigen eindeutigen Index mithilfe einer Shadow-Eigenschaft zu erstellen. Ich weiß, dass ich dieses Problem lösen kann, indem ich nur eine Eigenschaft hinzufüge, aber ich würde gerne sehen, ob dies möglich ist, ohne das zu tun, um mein Modell sauber zu halten.
Um einen mehrspaltigen Index zu erstellen, haben Sie in Fluent API die folgende Option:
modelBuilder.Entity<AlbumTrack>().HasIndex(t => new { t.TrackNumber, t.AlbumId).IsUnique();
Aber ich möchte mein Modell nicht mit einer zusätzlichen AlbumId-Eigenschaft durcheinander bringen und daher eine Schatteneigenschaft verwenden, für eine einzelne Spalte funktioniert das:
modelBuilder.Entity<AlbumTrack>().HasIndex(t => EF.Property<int>(t,"AlbumId")).IsUnique();
Aber für einen mehrspaltigen Index, der eine Schatteneigenschaft verwendet, wie folgt
modelBuilder.Entity<AlbumTrack>()
.HasIndex(t => new { t.TrackNumber, EF.Property<int>(t,"AlbumId")})
.IsUnique();
Ich bekomme den folgenden Fehler in vscode
Ungültiger anonymer Typmemberdeklarator Anonyme Member müssen mit einer Member-Zuweisung, einem einfachen Namen oder Member-Zugriff deklariert werden.
Hat jemand eine Idee wie man dies mit Schatteneigenschaften macht oder ist das einfach nicht möglich?
Es ist möglich. Sie können die HasIndex
Überladung einfach mit params string[] propertyNames
.
Stellen Sie zunächst sicher, dass die Schatteneigenschaft definiert ist:
modelBuilder.Entity<AlbumTrack>()
.Property<int>("AlbumId");
und dann den Index definieren:
modelBuilder.Entity<AlbumTrack>()
.HasIndex("TrackNumber", "AlbumId")
.IsUnique();