2

글쎄, 나는 세 테이블 간의 다 대다 관계를 만들기 위해 얼마 동안 노력해왔다. 포럼, 역할, 액세스 마스크. SQL에서 그것은이를 좋아하는 것 : 등등DbContext - 3 대 테이블 간의 다 대다 신뢰 관계

ForumID | RoleID | AccessMaskID 
-------------------------------- 
1  | 1  | 2 
2  | 2  | 1 

그리고있다. 너는 그 생각을 가지고있어. ForumID 및 RoleID는 테이블의 기본 키입니다. 질문은 .. DbContext에서 그것을하는 방법? 엔티티에 키가 누락되었다는 소리를 내뱉습니다. (정말 ?). modelBuilder를 사용하여 두 테이블을 만들고 다 대다 관계를 발견했지만 알 수 있듯이 여전히 하나의 테이블이 누락되었습니다.

답변

3

이것은 다 대다 관계가 아닙니다. 이 테이블을 별도의 엔티티로 표시하고 세 개의 일대 다 관계를 매핑해야합니다. 접합 테이블에이 테이블의 키만 들어 있으면 다 대다 관계가 두 테이블 사이에서만 작동합니다.

public class Forum 
{ 
    public int Id { get; set; } 
    ... 
    public virtual ICollection<ForumRole> ForumRoles { get; set; } 
} 

public class Role 
{ 
    public int Id { get; set; } 
    ... 
    public virtual ICollection<ForumRole> ForumRoles { get; set; } 
} 

public class AccessMask 
{ 
    public int Id { get; set; } 
    ... 
    public virtual ICollection<ForumRole> ForumRoles { get; set; } 
} 

public class ForumRole 
{ 
    [Key, Column(Order = 0)] 
    public int ForumId { get; set; } 
    [Key, Column(Order = 1)] 
    public int RoleId { get; set; } 
    public int AccessMaskId { get; set; } 

    public virtual Forum Forum { get; set; } 
    public virtual Role Role { get; set; } 
    public virtual AccessMask AccssMask { get; set; } 
}