1

我正在使用具有简单设计的 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'.

我尝试将 [Required] 属性应用于 Post 和 PostID。我尝试将 ForeignKey 属性放在 FK 关系的另一端。我已经尝试将 InverseProperty 属性应用于 Post (它将错误更改为只是一个模糊的 NullReferenceException - 这似乎是一个错误)。

4

1 回答 1

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 的一个错误,它允许将复合键应用于这些属性,但实际上并未将其应用到数据库中(由上述代码生成的表在 Tag 上有一个单列 PK) .

于 2012-03-01T21:59:10.547 回答