Voglio creare una tabella con una chiave primaria ombreggiata (fuori dal modello).
public class Person
{
public string Name { get; set; }
}
public class PersonEntityTypeConfiguration : IEntityTypeConfiguration<Person>
{
public void Configure(EntityTypeBuilder<Person> builder)
{
builder.Property?
builder.HasKey("Id")????
}
}
Nota: il caso reale è una classe diversa e un oggetto valore (DDD).
Ci sono due modi per farlo. Uno è definire la proprietà e quindi configurarla come chiave (l'ordine è importante)
builder.Property<int>("ID")
.HasColumnType("int")
.ValueGeneratedOnAdd();
builder.HasKey("ID");
Probabilmente vuoi ValueGeneratedOnAdd
qui, perché è più o meno il punto delle proprietà shadow a fare tutto ciò che è sotto il cofano.
Non mi piace mai il codice in cui l'ordine delle affermazioni è un requisito nascosto. Può portare a bug inaspettati. Preferirei l'opzione a singola istruzione:
builder.Property<int>("ID")
.HasColumnType("int")
.ValueGeneratedOnAdd()
.HasAnnotation("Key", 0);
Il valore 0
in HasAnnotation
è inserito perché è obbligatorio. Non ha influenza sulla generazione della chiave.
Non sono ancora sicuro se sia una buona idea utilizzare le proprietà shadow nelle chiavi. Non riesco a controllare quali problemi possono apparire quando effettivamente lavoro con loro. Potrebbe essere davvero una buona idea.