2012-03-14 4 views
3

EF 4.3 코드의 외래 키들로 구성된 복합 키를 생성하는 데 문제가 있습니다. 데이터 주석을 통해이 문제를 해결하고 싶습니다. EventID가 외래 키 대 이벤트이고 주 EventVote 테이블의 일부임을 나타내는 올바른 데이터 주석을 찾을 수 없습니다. 내가 테이블 'EventVotes'에 FOREIGN KEY 제약 조건 'EventVote_User'을 소개이코드 첫 번째 복합 키가 외래 키들로 구성됨 ef 4.3

public class EventVote 
{ 

    [Key, Column(Order = 0)] 
    [ForeignKey("Event")] 
    public int EventID { get; set; } 

    [Key, Column(Order = 1)] 
    [ForeignKey("User")] 
    public int UserID { get; set; } 

    [Required] 
    public DateTime VoteTime { get; set; } 

    [Required] 
    public bool Vote { get; set; } 



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

오류 를 달성하려면 어떻게 사이클 또는 여러 개의 캐스케이드 경로의 원인이 될 수 있습니다. NO DELETE NO ACTION 또는 UP UP NO NO ACTION을 지정하거나 다른 FOREIGN KEY 제약 조건을 수정하십시오. 제약 조건을 만들 수 없습니다. 이전 오류를 참조하십시오.

+0

오류 메시지 또는 실제로 작동하지 않는 것에 대한 설명? – AaronLS

+0

이 오류 메시지 – gh9

+1

로 업데이트 됨'Event' 및'User' 클래스에 대한 코드 게시 – Eranga

답변

3

시도해보십시오. 또는 탐색 속성에 ForeignKey 주석을 넣고 FK의 이름을 참조 할 수 있습니다. 그것은 당신의 문제가 있지만, 가치가 시도 IMO

public class EventVote 
{ 

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

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

    [Required] 
    public DateTime VoteTime { get; set; } 

    [Required] 
    public bool Vote { get; set; } 


    [ForeignKey("EventID")] 
    public virtual Event Event { get; set; } 
    [ForeignKey("UserID")] 
    public virtual User User { get; set; } 
} 

편집을 해결할 수 있는지 확실하지 : 당신의 오류 메시지에서 당신이 일대일 관계의 매핑으로 발생하는 것과 유사한 문제가있는 것 같은데. Fluent API를 사용하여 각 관계의 한 쪽에서 계단식을 사용하지 않도록 지정하는 방법에 대한이 기사를 참조하십시오.

이 문제를 해결하는이 기사를 참조하십시오. 사용자는 데이터 주석 대신 사용할 수있는 Fluent API를 사용하여 매핑/관계를 지정하거나 Data Annotation을 사용하고 Fluent API를 사용하여 필요에 따라 계단식/업데이트를 해제 할 수 있습니다.

http://weblogs.asp.net/manavi/archive/2011/05/01/associations-in-ef-4-1-code-first-part-5-one-to-one-foreign-key-associations.aspx

+0

은 오류를 수정하지 않았습니다. – gh9

+1

데이터 마스킹과 캐스 캐이 딩 삭제 및 업데이트를 혼합하여 사용했습니다. 고맙습니다! – gh9

관련 문제