Estoy intentando crear un índice único de varias columnas utilizando una propiedad de sombra. Sé que puedo resolver este problema con solo agregar una propiedad, pero me gustaría ver si esto es posible sin hacer eso para mantener mi modelo limpio.
Para crear un índice de varias columnas, tiene la siguiente opción en Fluent API:
modelBuilder.Entity<AlbumTrack>().HasIndex(t => new { t.TrackNumber, t.AlbumId).IsUnique();
Pero no quiero saturar mi modelo con una propiedad adicional de AlbumId y por lo tanto quiero usar una propiedad de sombra, para una sola columna esto funciona:
modelBuilder.Entity<AlbumTrack>().HasIndex(t => EF.Property<int>(t,"AlbumId")).IsUnique();
Pero para un índice de varias columnas usando una propiedad de sombra, como la siguiente
modelBuilder.Entity<AlbumTrack>()
.HasIndex(t => new { t.TrackNumber, EF.Property<int>(t,"AlbumId")})
.IsUnique();
Me sale el siguiente error en vscode
Declarador de miembro de tipo anónimo no válido. Los miembros de tipo anónimo deben declararse con una asignación de miembro, nombre simple o acceso de miembro.
¿Alguien tiene una idea de cómo hacer esto con el uso de propiedades de sombra o simplemente no es posible?
Es posible. Simplemente puede usar la sobrecarga HasIndex
con la params string[] propertyNames
.
Primero asegúrese de que la propiedad de la sombra está definida:
modelBuilder.Entity<AlbumTrack>()
.Property<int>("AlbumId");
y luego definir el índice:
modelBuilder.Entity<AlbumTrack>()
.HasIndex("TrackNumber", "AlbumId")
.IsUnique();