实体框架关系,代码优先

时间:2015-01-25 12:22:48

标签: entity-framework

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

表:

Director
1导演可以“拥有”很多电影。所以在我有很多电影的数据库中,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添加第二部电影时会出现问题。我尝试在Management studio中对其进行硬编码,但是我收到以下错误:

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

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

我首先使用实体​​框架代码,并希望获得有关如何正确设置它的帮助。

1 个答案:

答案 0 :(得分:0)

KeyDirectorId表格中的FilmIdFilms移除Reviews属性。因为您为这些表定义了Key属性(如果您查看创建的表,您可以看到这些字段具有主键),因此您无法在这些表中插入两个具有相同FilmId \ DirectorId的记录

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

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