Ho persona e indirizzo. L'indirizzo è facoltativo Si prega di vedere sotto il codice
class Person
{
[Key]
public int PersonID { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
}
class Address
{
[Key, ForeignKey("Person")]
public int PersonID { get; set; }
public string City { get; set; }
}
Il codice di registrazione è di seguito:
modelBuilder.Entity<Address>(entity =>
{
entity.HasKey(z => z.PersonID);
entity.HasOne(p => p.Person)
.WithOne(a => a.Address)
.HasForeignKey<Person>(a => a.PersonId);
});
Come devo modificare il mapping per rendere facoltativo l'indirizzo?
Qui
.HasForeignKey<Person>(a => a.PersonId)
si sta dicendo che EF Person.PersonId
sarà un FK (chiave esterna) per Address
, cioè Person
è dipendente e fa riferimento principale Address
.
Dovrebbe essere il contrario:
.HasForeignKey<Address>(a => a.PersonId)
In questo modo, Person
(il principale) avrà 0..1 Address
e Address
(il dipendente) avrà 1 Person
(perché PersionId
è sia PK che FK).
Questa si chiama associazione chiave primaria condivisa ed è il modo standard (e predefinito) di modellare da uno a zero o una relazione in EF Core.
Per ulteriori informazioni, consultare Relazioni .