EF Core один к одному или нулевые отношения - PullRequest
0 голосов
/ 04 марта 2019

У меня есть Персона и Адрес.Адрес не является обязательным.Пожалуйста, смотрите ниже код

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);
            });

Как мне изменить сопоставление, чтобы сделать адрес возможным?

1 Ответ

0 голосов
/ 04 марта 2019

Здесь

.HasForeignKey<Person>(a => a.PersonId)

вы говорите EF, что Person.PersonId будет FK (внешний ключ) для Address, то есть Person зависит и ссылается на принципала Address.

Это должно быть наоборот:

.HasForeignKey<Address>(a => a.PersonId)

Таким образом, Person (основной) будет иметь 0,1 Address, а Address (зависимый) будетиметь 1 Person (потому что PersionId это и PK, и FK).

Это называется Ассоциация общего первичного ключа и является стандартным (и используемым по умолчанию) способом моделирования отношения один к нулю или одного в EF Core.

Для получения дополнительной информации см. Отношения .

...