我正在尝试理清三个表之间的关系。
表:
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。
我首先使用实体框架代码,并希望获得有关如何正确设置它的帮助。
答案 0 :(得分:0)
从Key
和DirectorId
表格中的FilmId
和Films
移除Reviews
属性。因为您为这些表定义了Key
属性(如果您查看创建的表,您可以看到这些字段具有主键),因此您无法在这些表中插入两个具有相同FilmId \ DirectorId的记录
[ForeignKey("Director")]
public int DirectorId { get; set; }
[ForeignKey("Film")]
public int FilmId { get; set; }