我正在使用Entity Framework 4.3,设计简单:
public class Post
{
[Key]
public int ID { get; set; }
public string Text { get; set; }
public HashSet<PostTag> Tags { get; set; }
}
public class PostTag
{
public Post Post { get; set; }
[Key, Column(Order=0)]
[ForeignKey("Post")]
public int PostID { get; set; }
[Key, Column(Order=1)]
[MaxLength(50)]
public string Tag { get; set; }
}
因此,您可以看到Post有多个标签,这些标签使用PostID和Tag的复合主键。
当我运行update-database
时,我得到:
Cannot define PRIMARY KEY constraint on nullable column in table 'PostTag'.
我尝试将[必需]属性应用于Post和PostID。我已经尝试将ForeignKey属性放在FK关系的另一侧。我已经尝试将InverseProperty属性应用于Post(它将错误更改为模糊的NullReferenceException - 这似乎是一个错误)。
答案 0 :(得分:0)
事实证明,如果我将InverseProperty放在HashSet上,EF可以迁移数据库,但前提是它是干净的:
public class Post
{
...
[InverseProperty("Post")]
public HashSet<PostTag> Tags { get; set; }
}
如果我从看起来像这样的PostTag类迁移:
public class PostTag
{
public Post Post { get; set; }
[Key]
[ForeignKey("Post")]
public int PostID { get; set; }
[Key]
[MaxLength(50)]
public string Tag { get; set; }
}
我得到例外:
'FK_PostTag_Post_Post_ID'不是约束。 无法删除约束。查看以前的错误。
看起来它可能是EF Code First的一个错误,它允许将复合键应用于这些属性,但实际上并未将其应用于数据库(由上述代码生成的表具有单列PK在Tag)。