@Matsun

Entity Framework Code First — почему при создании отношения one to many, в таблице создаются 2 колонки?

Использую технологию Entity Framework Code First при проектировании БД для своего блога.
В данный момент пишу сущности статьи (Article) и комментариев (Comment).
Сущность Article относится к Comment - one to many.
Почему при создании БД, фреймворк в таблице Comment создаёт сразу 2 колонки:
Comment_ID (зачем?)
Article_ID (с этой всё понятно).
92c4f01d3ef5.jpg
Тем более что в колонке Comment_ID все значения NULL
  • Вопрос задан
  • 594 просмотра
Пригласить эксперта
Ответы на вопрос 2
Jeer
@Jeer
уверенный пользователь
Код-то покажи? Думаю, что что-то неправильно написал
public class Article
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }

       ...

        public virtual ICollection<Comment> comm { get; set; }
    }

public class Comment
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public Guid ArtId { get; set; }
        
       ...

        [ForeignKey("ArtId")]
        public virtual Article art { get; set; }
    }
Ответ написан
@Matsun Автор вопроса
Да, у меня по другому написано, зачем делать свойства виртуальными? и в той и другой сущности?
Также, не добавил атрибут [ForeignKey("ArtId")] так как мне казалось что фреймворк сам разберётся какой ключ делать внешним

Вот мой вариант
public class Article
    {
        ...

        public List<Comment> CommentList { get; set; }

        public Article()
        {
            CommentList = new List<Comment>();
        }
        ...
}
public class Comment
    {
        public int ID { get; set; }

        public int ParentID { get; set; }

        public string FullText { get; set; }

        public string Author { get; set; }

        public string Email { get; set; }

        public DateTime DatePublication { get; set; }

        public Article Article { get; set; }
        ...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы