Как построить отношения «многие ко многим» в классе, который имеет один список ссылок того же типа с объектом связывания? - PullRequest
0 голосов
/ 14 июня 2019

Я разрабатываю приложение для отслеживания заметок, и мне нужно иметь ссылки между некоторыми заметками.Я использую класс Note и промежуточный класс RelatedNote для хранения каждой ссылки «один к одному»:

public class Note
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public virtual ICollection<RelatedNote> RelatedNotes { get; set; }
}
public class RelatedNote
{
    public int Note1_Id { get; set; }
    public Note Note1 { get; set; }
    public int Note2_Id { get; set; }
    public Note Note2 { get; set; }
}

Поскольку я настраивал базу данных с использованием подхода «сначала код», я пытаюсь использоватьсвободный API для создания таблицы.Мой процесс состоит в том, чтобы объявить кластерный первичный ключ, а затем определить отношение ".HasOne (). WithMany (). HasForeignKey ()".

modelBuilder.Entity<RelatedNote>()
    .HasKey(rn => new { rn.Note1_Id, rn.Note2_Id });

modelBuilder.Entity<RelatedNote>()
    .HasOne(n => n.Note1)
    .WithMany(rn => rn.RelatedNotes)
    .HasForeignKey(n => n.Note1_Id);

Но это создает таблицу с 3 столбцами: Note1_Id, Note2_Idи Note2Id.Первый и последний столбцы содержат Id примечаний.generated link table

Но я не понимаю двух аспектов полученной таблицы:

  1. Почему существует три столбца, а не только два?
  2. Почему EF называет столбец, который содержит второй Note Id, как "Note2Id" вместо использования "Note2_Id" (то же соглашение об именах, что и в первом столбце?).

Я уже создалсвязь «многие ко многим» с двумя другими классами (класс «Автор» - класс «AuthorGroup» - класс «Группа»), которая привела к созданию таблицы связи из двух столбцов.Действительно ли три столбца необходимы для такого рода ссылок в одном классе?И, если возможно, есть ли способ, которым я могу описать связь между связанными Notes с помощью строки или байта, чтобы сказать, что Note1 является «родителем» Note2?

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