Non penso che quello che sto cercando di fare sia pazzesco. Ho un'entità Person che avrà un indirizzo. Non voglio avere il PersonId
come proprietà nella mia entità Address. Quando provo a salvare nel database, sebbene EF Core continui a darmi un errore sul non poter inserire NULL nella colonna PersonId
nella tabella Indirizzo.
public class Person
{
public int Id { get; private set;}
public string Name { get; private set;}
public Address Address { get; private set;}
// .. constructor etc
}
public class Address
{
public int Id { get; private set;}
public string Street { get; private set;}
// .. constructor etc
}
Tabelle del database:
Persona: Id, Nome
Indirizzo: Id, Street, PersonId
O ho bisogno di avere proprietà di navigazione di riferimento su entrambi i lati, che sembra davvero sciocco da fare.
Se si dispone di 1: 1 persona: indirizzo è possibile utilizzare anche l'oggetto Valore. È meraviglioso.
Il tuo oggetto principale registrato nel tuo DbContext per EF
public DbSet<Person> Persons { get; set; }
public class Person
{
public int Id { get; private set;}
public string Name { get; private set;}
public Address address { get; private set;}
// .. constructor etc
}
E il tuo oggetto Address come oggetto Value con attributo [Owned]
[Owned]
public class Address
{
public int Id { get; private set;}
public string Street { get; private set;}
}
e quindi impostare la mappatura in DbContext OnModelCreating
modelBuilder.Entity<Person>().OwnsOne(o => o.Address);
EF genererà il tuo oggetto valore nella tabella Persona ma nella tua applicazione avrai due oggetti.