2014-09-08 1 views
1

Entity Framework에서 데이터베이스를 마이그레이션하는 동안 다음 오류가 발생합니다.EF 6.1 코드 우선 - 지정된 열 수가 기본 키 열 수와 일치해야합니다.

지정된 연관 외래 키 열 'question_set_id'가 잘못되었습니다. 지정된 열의 수는 기본 키 열 수와 일치해야합니다.

원본 기본 키 QuestionSetId를 삭제하고 복합 키 관계를 만들었습니다. 복합 키 관계의 열은 또한 외래 키에 매핑됩니다. 문제가 무엇인지 잘 모르겠습니다.

여기 엔 연관된 엔티티가 있습니다.

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")) 
     ; 
+0

'Question' 엔티티에서 오류가 발생했습니다. 이 엔티티는'QuestionSet'과 복합 외래 키를 가져야합니다. 'Question'은 question_set_id를'QuestionSet'의 외래 키로 생각합니다. – Dabblernl

+0

감사합니다. 그 가능성을 살펴 봅니다. 나는 그것이 많은 관계에 있다는 사실 때문에 다른 문제들을 발견했습니다. 더 자세히 살펴본 후 더 많은 정보로 내 게시물을 수정하겠습니다. – Sigotron

+0

당신은 그것을 가지고 있습니다 :'QuestionSet'은 합성 기본 키를 가지고 있으며 당신은 유창한 API 코드에서 Question_Set_Question 접합 테이블을위한 하나의 외래 키를 지정하고 있습니다. – Dabblernl

답변

4

QuestionSet는 두 개의 키를 가지고,하지만 QuestionSetMapLeftKey은 하나의 키를 spefified :

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가 있습니다.

MapLeftKey("question_set_id") 

이런 식으로 뭔가로 교체 :

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

첫 번째 키 (칼럼의 주문 0) ReviewCycleId이고, 두 번째 키는 TitleId (칼럼의 순서 1)입니다. 에도 두 개의 키가 없으면 문제를 해결해야합니다.

+1

감사합니다. 도움이되었으며 실제로 문제를 해결했습니다! – Sigotron