2009-07-23 3 views
2

NHibernate를 사용하여, 어떻게하면 다음과 같은 시나리오를 매핑 할 수 있습니다 :IList 값이있는 IDictionary를 매핑하는 방법은 무엇입니까?

public class User 
{ 
    public virtual IDictionary<Project, IList<Role>> ProjectAssignments { get; set; } 
} 

데이터베이스에 User, ProjectRole에 대한 별도의 테이블과 관계에 대한 네 번째 테이블이 있습니다.

어떤 도움을 주시면 감사하겠습니다.

답변

1

당신은 할 수 없습니다 - Ayende's blog discussing <map>

나는 여전히 <지도 />이 는 (더 많은 옵션입니다 IDictionary <, 비록 K에 대한 모든 옵션을 포함하지 않았 음을 지적하고 싶습니다에서 할 , IList < V >>는 매핑이 가능한 이 아니며 그렇게해야하는 문제가있는 SQL 문에 해당합니다.

일부 중간 엔터티/구성 요소가 필요합니다. 아마도 ProjectAssignment 엔티티가 사용자, 프로젝트 및 역할 간의 네이티브 연결을 끊을 것입니다. 시간이 지남에 따라 추가 속성을 늘릴 것입니다 (시간이 지남에 따라 할당에 대한 변경 내용을 추적하므로 StartDateEndDate이됩니다). 속성). 같은

뭔가 :

public class User { 
    // ... other attributes etc. 
    public virtual ISet<ProjectAssignment> Assignments {get;set;} 
} 

public class Project { 
    // ... other attributes etc. 
    public virtual ISet<ProjectAssignment> Assignments {get;set;} 
} 

public class Role { 
    // ... other attributes etc. 
} 

public class ProjectAssignment 
{ 
    public virtual Int64 {get;set;} 
    public virtual User User {get;set;} 
    public virtual Project Project {get;set;} 
    public virtual Role Role {get;set;} 
    // ... other attributes etc. 
} 

난 그냥 그 자체로 영속 클래스로 ProjectAssignment을지도하고 싶지만 정상 일대 어떤 맛으로 User.Assignments 컬렉션. (당신이 프레임 워크 V3.5을 사용하는 경우 또는 아마 iLookup으로) 마지막으로, 나는 사전에 세부 사항을 추출하는 방법을 추가 할 것입니다 : 모든 것입니다 어떻게에 대해 조금 혼란 스러워요

ILookup<Project, Role> GetRolesByProject() { 
    return Assignments.ToLookup(x => x.Project, x => x.Role); 
} 
+0

: 같은 것을 적합하게. 중개자가 어떻게 보이는지, 그리고 어떻게 매핑 할 것인지 예를 들어 주시겠습니까? –

+0

지금 제 답변을 연장했습니다. –

+0

코드에 대해 고마워 :) 작동했습니다! –

관련 문제