Я разрабатываю приложение для отслеживания заметок, и мне нужно иметь ссылки между некоторыми заметками.Я использую класс 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](https://i.stack.imgur.com/GeE88.png)
Но я не понимаю двух аспектов полученной таблицы:
- Почему существует три столбца, а не только два?
- Почему EF называет столбец, который содержит второй Note Id, как "Note2Id" вместо использования "Note2_Id" (то же соглашение об именах, что и в первом столбце?).
Я уже создалсвязь «многие ко многим» с двумя другими классами (класс «Автор» - класс «AuthorGroup» - класс «Группа»), которая привела к созданию таблицы связи из двух столбцов.Действительно ли три столбца необходимы для такого рода ссылок в одном классе?И, если возможно, есть ли способ, которым я могу описать связь между связанными Notes с помощью строки или байта, чтобы сказать, что Note1 является «родителем» Note2?