Entity framework 关系,代码优先

Entity framework relations, code-first

我正在尝试理清三个 table 之间的关系。

表格:

Director

1个导演可以"have"多部电影。所以在我有很多电影的数据库中,directorId 可以作为外键出现在其中的几部电影中。

Film

每部电影只有 1 位导演和 1 条评论

Review

在这种情况下,每部电影只有 1 条评论。所以我想 reviewId 应该作为外键出现在 Film.

我现在的样子:

public class Director
    {
        public int DirectorId { get; set; }
        public string Name { get; set; }
    }

public class Film
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int FilmId { get; set; }
        public string Title { get; set; }

        [Key, ForeignKey("Director")]
        public int DirectorId { get; set; }
        public virtual Director Director { get; set; }
    }

 public class Review
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ReviewId { get; set; }
        public string Text { get; set; }

        [Key, ForeignKey("Film")]
        public int FilmId { get; set; }
        public virtual Film Film { get; set; }
    }

我想问题是在我尝试添加第二部电影时出现的,其 directorId 已经存在于另一个 table 中。我尝试在 Management studio 中对其进行硬编码,但出现以下错误:

Cannot insert duplicate key in object "dbo.film". The duplicate key value is(1)

当然(1)是之前电影中已经存在的DirectorId。

我正在使用 Entity framework Code first,非常感谢有关如何正确设置它的帮助。

FilmsReviews 表中的 DirectorIdFilmId 中删除 Key 属性。因为您为这些表定义了一个 Key 属性(如果您查看您创建的表,您可以看到这些字段具有主键),所以您不能在这些表中插入具有相同 FilmId\DirectorId 的两条记录

 [ForeignKey("Director")]
 public int DirectorId { get; set; }

 [ForeignKey("Film")]
 public int FilmId { get; set; }