0

나는 이것이 어딘가에서 다루어졌지만 나는 찾을 수 없다고 생각한다. 올바른 검색어를 사용하지 않는 것 같습니다.many-to-many 관계의 복합 기본 키와 코드의 열 먼저

기본적으로 나는 POCO로 정의하는 다 대다 테이블을 가지고 있습니다. 또한 원할 경우 두 개의 일대 다 관계가있는 테이블로 볼 수 있습니다.

한쪽 끝에는 다른 쪽 끝에 사용자 테이블과 나누기 테이블이 있습니다. 그러나 각 사용자 구분 콤보에는 여러 개의 관계가있을 수 있습니다. 따라서 연관 테이블에는 연도에 대한 int 열이 있고 기본 키는 UserId fk, DivisionId fk 및 Year의 복합 항목이됩니다.

EF 4.1 코드 우선에서 어떻게해야할지 확신이 들지 않았습니다. 나는 DataAnnotation 방법과 FluentApi 방법이 있기를 바라고있다.

이 내용을 다룬 튜토리얼을 가르쳐 주시면 정말 기쁠 것입니다.

사용자 :

public class User 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 

    //some other properties 

    public virtual ICollection<DivisionService> Services { get; set; } 
} 

부문 :

public class Division 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int DivisionId { get; set; } 

    //some other properties 

    public virtual ICollection<DivisionService> Services { get; set; } 
} 

가입/메인 테이블 :

public class DivisionService 
{ 
    public int Year { get; set; } //this and the two foreign keys should be composite Primary Key 

    //some other properties 

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

답변

2

당신은 FluentAPI에 HasKey 방법을 사용하고 .HasKey(x => new { x.Year, x.UserId, x.DivisionId })를 호출 할 수 있습니다. 데이터 주석을 사용하면이 세 가지 속성에 [Key] 속성을 지정하기 만하면됩니다.

+0

[Key]를 User 및 Division 속성에 추가 할 수 있으며 EF는 해당 테이블에 대한 fk로 인식합니까? –

+0

아니요,'[Key]'는 PK에 관한 것입니다. 연도가있는 조인 테이블을 사용하려면 두 개의 1-N으로 연결을 설정하거나 PK의 연도 부분을 만들어야합니다. 페이로드가있는 연결은 지원되지 않습니다. –

+0

그게 내가 말하는거야. 당신은 UserId와 DivisionId에 [Key] 속성을 DivisionService의 외래 키처럼 넣어야한다고 말했지만, 나는 정의하지 않았다. 코드는 먼저 나를 위해 그것을한다. 그래서 저는 그것들을 프로퍼티에 넣을 수 있습니다. 그리고 코드 우선은 그것을 FK 필드로 이해합니까? –