множественный внешний ключ один к одному из той же таблицы EF Core - PullRequest
0 голосов
/ 13 ноября 2018

Застрял в коде записи для табличного отношения ниже:

 public class PersonModel
{
    public int ID { get; set; }
    public string Name{ get; set; }
    public string Address{ get; set; }
    public DateTime? DateofBirth{ get; set; }
    public GenderEnum Gender{ get; set; }

    public PersonDetailModel PersonDetail { get; set; }
    public PersonDetailModel PersonDetailforMate { get; set; }

}

public class PersonDetailModel
{
    public int ID { get; set; }
    public int PersonID { get; set; }
    public int? MateID { get; set; }
    public string PhoneNumber{ get; set; }
    public string OfficeAddress{ get; set; }
    public MarriageStatusEnum MarriageStatus{ get; set; }

    public PersonModel Person { get; set; }
    public PersonModel PersonforMate { get; set; }

}

Я использую Fluent API:

modelBuilder.Entity<PersonModel>()
            .HasOne(d => d.PersonDetailModel)
            .WithOne(p => p.PersonModel)
            .HasForeignKey<PersonDetailModel>(d => d.PersonID);

modelBuilder.Entity<PersonDetailModel>()
            .HasOne(d => d.PersonModel)
            .WithOne(p => p.PersonDetailModel)
            .HasForeignKey<PersonDetailModel>(d => d.MateID);

когда я строю, получаю ошибку

Cannot create a relationship between 'PersonModel.PersonDetailforMate' and 'PersonDetailModel.Person', because there already is a relationship between 'PersonModel.PersonDetail' and 'PersonDetailModel.Person'. Navigation properties can only participate in a single relationship.

Есть несколько ссылок на подобную проблему:

но это для отношений один-ко-многим.

* извините за мой плохой английский

1 Ответ

0 голосов
/ 13 ноября 2018

У меня была похожая ситуация в моем проекте, и вот что я закончил:

public class PersonModel
{
    public int ID { get; set; }
    public string Name{ get; set; }
    public string Address{ get; set; }
    public DateTime? DateofBirth{ get; set; }
    public GenderEnum Gender{ get; set; }

    public int PersonID { get; set; }
    [ForeignKey("PersonID ")]
    public PersonDetailModel PersonDetail { get; set; }

    public int? MateID { get; set; }
    [ForeignKey("MateID")]
    public PersonDetailModel PersonDetailforMate { get; set; }
}

public class PersonDetailModel
{
    public int ID { get; set; }
    public string PhoneNumber{ get; set; }
    public string OfficeAddress{ get; set; }
    public MarriageStatusEnum MarriageStatus{ get; set; }
}

так что PersonModel будет иметь два внешних ключа для PersonDetailModel. Я использую атрибут ForeignKey, чтобы явно указать EF, какому внешнему ключу принадлежит какое отношение - если вы используете атрибут Foreignkey, вам не понадобятся конфигурации Fluent API ...

Приведенный выше код создаст вам таблицу PersonModel в БД, со столбцами PersonId и MateId в качестве внешнего ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...