2013-06-03 2 views
2

나는이처럼 보이는 데시벨을위한 모델을 정의합니다. 외래 키가 기본 키가 아닌 테이블의 열을 모델로 설정해야합니다. 내 질문 : 모델을 정의하고 기본 키를 사용하지 않고 엔티티 간의 관계를 연결하려면 어떻게해야합니까?깊은 관계/중첩 된 모델

답변

2

이러한 테이블을 어떻게 연결할 수 있습니까? 일반적으로 데이터베이스의 테이블 구조를 (대부분의 경우) 미러링 할 모델 설정이 있습니다. 아래는 모델을 설정하는 방법입니다. UserUserRoles의 모음을 가지고 있으며 각 모음은 해당 레코드와 함께 Role입니다.

internal class User 
{ 
    public User() 
    { 
     UserRoles = new List<UserRole>(); 
    } 

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

    public ICollection<UserRole> UserRoles { get; set; } 
} 

internal class UserRole 
{ 
    [Key] 
    public int UserRoleId { get; set; } 

    public int UserId { get; set; } 
    public int RoleId { get; set; } 

    [ForeignKey("UserId")] 
    public User User { get; set; } 

    [ForeignKey("RoleId")] 
    public Role Role { get; set; } 
} 

internal class Role 
{ 
    public Role() 
    { 
     UserRoles = new List<UserRole>(); 
    } 

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

    public string RoleName { get; set; } 

    public ICollection<UserRole> UserRoles { get; set; } 
} 

그래서 기본적으로 사용자 및 UserRole 사이에 많은에 하나, 그리고 클래스 UserRoles을 선언하는 많은 Role 사이 UserRole

+0

컴파일되었지만 목록에로드 된 역할이 없습니다. 귀하의 예에서 역할은 UserRole에 어떻게 매핑됩니까? – Arcadian

+0

@ magic-c0d3r Righto, UserRole과 Role 사이에 User와 UserRole 사이에 one to many와 one to many를 가지도록 코드 샘플을 업데이트했습니다. 이게 당신이 염두에 두었던 것입니까? – jstromwick

+0

RoleInfo가 UserRole의 컬렉션 인 이유는 무엇입니까? 어떤 도움이라도 대단히 감사합니다. – Arcadian

3

당신은 필요가 없습니다에 하나가, EF 코드가 처음 만들 것 장면 뒤에 필요한 관계 테이블이 모두 당신이 필요합니다

public class User 
{ 
    public int Id {get;set;} 
    public virtual ICollection<Role> Roles {get;set;} 
} 

public class Role 
{ 
    public int Id {get;set;} 
    public virtual ICollection<User> Users {get;set;} 
} 

다음 우선 당신의 OnModelCreating :

protected override void OnModelCreating(DbModelBuilder builder) 
{ 
    builder.Entity<User>() 
    .HasMany(u => u.Roles).WithMany(r => r.Users) 
    .Map(t => t.MapLeftKey("UserId") 
    .MapRightKey("RoleId") 
    .ToTable("UserRoles")); 
} 

페이로드가있는 many-to-many이 필요한 경우에만 조인 테이블을 선언해야합니다. 이 게시물 확인 many-to-many with payload

+0

어떻게하면 일대 다와 함께 할 수 있을까요? 역할 모델에서 사용자를 가져 오는 경우? – Arcadian

+0

@ magic-c0d3r, 그래서'User'는 하나의'Role'을 가집니까? 와'Role'은 많은'Users'에 속해 있습니까? 응답을 확인하십시오. – SOfanatic

+0

사용자는 많은 역할을 가지고 있지 않으며 역할은 많은 사용자에게 속할 수 있습니다. 그러나 나는 그것을 내 모델에서 보여주고 싶지 않습니다. 이제는 많은 역할을 가진 사용자 만이 필요합니다. UserRole 클래스에 사용자를 포함시켜야 만하지 않는 한 – Arcadian