Создать отношение «многие ко многим» в модели к себе - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь создать правильную таблицу join, которая работает только с одной моделью, я планирую настроить страницы CRUD для этой таблицы, которые планирую использовать позже, поэтому я считаю, что она не может быть частью исходной модели. ,

public class Person
{
  [Key]
  public int PersonID { get; set;}

  public string Firstname { get; set;}
  public string LastName { get; set;}
  public string Birthday { get; set;}
}

Теперь я хотел бы отследить, как люди, их лучшие друзья и каковы дни рождения их лучших друзей.

public class Friends
{
  [Key]
  public int FriendshipID {get; set;}

  [ForeignKey("Person")]
  public Person SelectedPerson {get; set;}
  public int SelectedPersonID {get; set;}

  [ForeignKey("Person")]
  public Person Friend {get; set;}
  public int FriendID {get; set;}
}

У меня есть некоторые проблемы, один из которых я надеваю Я не полностью знаю, как работает [ForeignKey("xxxx")], но это может привести к ошибке. У человека может быть несколько лучших друзей, поэтому мне нужно иметь много записей в таблице друзей, где SelectedPerson будет одинаковым, чтобы получить всех своих лучших друзей, я чувствую, что если бы был хороший способ чтобы получить список своих друзей вместо единственного друга за раз, что имело бы преимущество, но, похоже, вызывало какую-то ошибку каскадного удаления?

Я знаю, что есть вопросы, похожие на этот вопрос в stackoverflow , но я не смог найти ни одного места, где он соединялся бы с одной и той же таблицей, в настоящее время я закомментировал ForeignKeys, потому что EF не может обрабатывать иностранные ключи с тем же именем.

Любая помощь / предложения очень ценится, спасибо за ваше время.

1 Ответ

2 голосов
/ 01 апреля 2020

Вы должны использовать InverseProperty в родительском классе, чтобы определить несколько отношений

и не использовать повторное имя для ForeignKey

public class Person
{
  [Key]
  public int PersonID { get; set;}

  public string Firstname { get; set;}
  public string LastName { get; set;}
  public string Birthday { get; set;}

  [InverseProperty("SelectedPerson")]
  public ICollection<Friends> SelectedPerson { get; set; }

  [InverseProperty("Friend")]
  public ICollection<Friends> SelectedFriends { get; set; }
}

затем измените класс Friends на этот

public class Friends
{
  [Key]
  public int FriendshipID {get; set;}

  [ForeignKey("SelectedPersonID")]
  public Person SelectedPerson {get; set;}
  public int SelectedPersonID {get; set;}

  [ForeignKey("FriendID")]
  public Person Friend {get; set;}
  public int FriendID {get; set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...