У меня есть Человек и Адрес. Адрес не является обязательным. Пожалуйста, смотрите код ниже
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; }
}
Регистрационный код ниже:
modelBuilder.Entity<Address>(entity =>
{
entity.HasKey(z => z.PersonID);
entity.HasOne(p => p.Person)
.WithOne(a => a.Address)
.HasForeignKey<Person>(a => a.PersonId);
});
Как мне изменить сопоставление, чтобы сделать адрес доступным?





Здесь
.HasForeignKey<Person>(a => a.PersonId)
вы говорите EF, что Person.PersonId будет FK (внешним ключом) для Address, то есть Person зависит и ссылается на принципала Address.
Должно быть наоборот:
.HasForeignKey<Address>(a => a.PersonId)
Таким образом, Person (основной) будет иметь 0..1 Address, а Address (зависимый) будет иметь 1 Person (поскольку PersonId является одновременно PK и FK).
Это называется Связь с общим первичным ключом и является стандартным (и используемым по умолчанию) способом моделирования отношения один к нулю или один в EF Core.
Дополнительные сведения см. в статье Отношения.