0

내 사용자 테이블에 추가 할 수 없습니다 기본 키와 같은 두 외래 키 :코드 첫 번째 - 마이그레이션

public class User 
    { 
     [Key] 
     public int UserId { get; set; } 

     public virtual ICollection<PollVote> PollVotes { get; set; } 
    } 

내 설문 조사 테이블 :

public class Poll 
    { 
     [Key] 
     public int PollId { get; set; } 

     public virtual ICollection<PollVote> PollVotes { get; set; } 
    } 

내 PollVote 테이블

public class PollVote 
    { 
     [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]   
     public int VoteId { get; set; } 

     [Key] 
     public int PollId { get; set; } 

     [Key] 
     public int UserId { get; set; } 

     public DateTime TimeVoted { get; set; } 
     public int Answer { get; set; } 

     public virtual Poll Poll { get; set; } 
     public virtual User User { get; set; } 
    } 

내를 구성 :

//User config: 
      this.HasMany(x => x.PollVotes) 
       .WithRequired() 
       .HasForeignKey(x => x.UserId) 
       .WillCascadeOnDelete(false); 

//Poll Config 
      this.HasMany(x => x.PollVotes) 
       .WithRequired() 
       .HasForeignKey(x => x.PollId) 
       .WillCascadeOnDelete(false); 

//PollVote Config 
      this.HasKey(x => x.UserId) 
       .HasRequired(x => x.User) 
       .WithMany() 
       .HasForeignKey(x => x.UserId); 
      this.HasKey(x => x.PollId) 
       .HasRequired(x => x.Poll) 
       .WithMany() 
       .HasForeignKey(x => x.PollId); 

관계는 다음과 같습니다. 하나의 설문 조사는 다수의 투표를 가질 수 있지만 사용자는 설문 조사마다 하나의 투표 만 제공 할 수 있습니다.

나는 내가 PM-콘솔에서 Add-Migration하려고 할 때이 오류가

\ tSystem.Data.Entity.Edm.EdmAssociationEnd : 다중성은 관계의 역할 'PollVote_Poll_Source' 'PollVote_Poll'에서는 유효하지 않습니다. 종속 역할은 주요 속성을 참조하므로 종속 역할의 다중도의 상한은 '1'이어야합니다. \ tSystem.Data.Entity.Edm.EdmAssociationEnd : : 다중도는 'Poll_PollVotes'관계에서 'Poll_PollVotes_Target'역할에서 유효하지 않습니다. 종속 역할은 주요 속성을 참조하므로 종속 역할의 다중도의 상한은 '1'이어야합니다.

의견이 있으십니까? 당신은 데이터 주석에 [Column] 속성을 추가하거나하여 복합 키를 지정

답변

2

...

[Key, Column(Order = 1)] 
    public int PollId { get; set; } 

    [Key, Column(Order = 2)] 
    public int UserId { get; set; } 

... 또는 유창함 API와 익명의 객체를 사용하여 :

this.HasKey(x => new { x.UserId, x.PollId }); 

this.HasRequired(x => x.User) 
    .WithMany(u => u.PollVotes) 
    .HasForeignKey(x => x.UserId); 

this.HasRequired(x => x.Poll) 
    .WithMany(p => p.PollVotes) 
    .HasForeignKey(x => x.PollId); 

돈 위와 같이 반향 탐색 속성에 대한 람다 식을 WithMany에 잊어 버리고 UserConfigPollConfig의 중복 구성을 제거하십시오.

+0

데이터베이스가 VoteID 필드를 중복 생성합니까? – Colin

+0

@Colin : 키와 관계를 정의하기 위해 예. 그러나 어쩌면 그는 어떤 이유로 든 투표소 번호를 매기는 고유 한 카운터를 원할 수도 있습니다. – Slauma

관련 문제