EF 6.1 Code First - 指定的列数必须与主键列的数量匹配

时间:2014-09-08 17:38:36

标签: entity-framework ef-code-first entity-framework-6.1

尝试在Entity Framework中迁移数据库时遇到以下错误。

指定的关联外键列' question_set_id'无效。指定的列数必须与主键列的数量匹配。

我删除了原始主键QuestionSetId并创建了一个复合键关系。复合键关系中的列也映射到外键。我不确定是什么问题。

以下是相关实体。

public class QuestionSet
{
    [Key, Column(Order = 1)]
    public long TitleId { get; set; }

    [ForeignKey("TitleId")]
    public virtual Title Title { get; set; }

    [Key, Column(Order = 0)]
    public long ReviewCycleId { get; set; }

    [ForeignKey("ReviewCycleId")]
    public virtual ReviewCycle ReviewCycle { get; set; }

    public virtual List<Question> Questions { get; set; }
}

DbContext有:

    modelBuilder.Entity<QuestionSet>()
            .HasMany(c => c.Questions)
            .WithMany(c => c.QuestionSets)
                .Map(x => x.ToTable("QUESTION_SET_QUESTION")
                    .MapLeftKey("question_set_id")
                    .MapRightKey("question_id"))
        ;

1 个答案:

答案 0 :(得分:4)

QuestionSet有两个键,但MapLeftKey QuestionSet只有一个键。

MapLeftKey("question_set_id")

用以下内容替换它:

MapLeftKey(new []{ "question_set_review_cycle_id", "question_set_title_id" })

第一个键是ReviewCycleId(列的顺序0),第二个键是TitleId(列的顺序1)。

它应该解决问题,除非Question也有两个键。