2011-09-26 4 views
4

Fluent Nhibernate Automapper가 원하는 것을 만들 때 문제가 있습니다. 두 개체 사이에 일대 다 관계가있는 엔티티가 두 개 있습니다.중재 테이블이있는 유창 NHibernate 일대 다?

class Person 
    { 
     public string name; 
     IList<departments> worksIn; 

    } 

    class Department 
    { 
     public string name; 
    } 

위는 분명 베어 뼈입니다,하지만 난의 구체화 스키마 생성하기 위해 기다리고있을 것입니다 : 불행하게도

Person{id, name} 
Department{id, name} 
PersonDepartment{id(FK person), id(Fk Department)} 

을, 내가 대신 무엇입니까 :

Person{id, name} 
Department{id, name, personid(FK)} 

I 돈 Person 테이블에 포함 된 Person에 대한 FK를 원하지 않는다면, 위의 PersonDepartment 테이블과 같은 별도의 Join/Lookup 테이블을 원한다. 두 테이블의 기본 키를 복합 PK와 Fks로 포함하고있다.

처음 초기 클래스를 잘못 작성했는지 (아마도 LIst workIn이어야 함 - List worksIn이 아닌 ID를 나타내는 경우), 아니면 수동으로 매핑해야하는지 잘 모르겠습니까?

이 작업을 수행 할 수 있습니까?

+0

를? –

+0

죄송합니다, 예. 다시 편집하겠습니다. – user676767

답변

0

클래스가 구조화 된 방식은 일대 다 관계를 제안합니다. (실제로 당신이 질문에 설명하는 방법입니다.) 따라서 FNH가 데이터베이스 관계를 모델링하는 방식을 선택하는 것은 놀라운 일이 아닙니다 .

수동으로 다 대다 테이블 매핑을 만드는 것이 좋습니다. 그러나 이것이 당신이 원하는 것입니까?

순수한 다 대다 관계는 매우 드뭅니다. 일반적으로 중간 엔터티를 도입하고 일대 다 관계를 두 개 사용하는 좋은 사례가 있습니다. 이렇게하면 링크에 추가 정보 (예 : 개인의 '기본'부서 또는 각 부서 내 각 부서의 세부 정보)를 추가 할 수 있습니다.

일부 예 "마른 사람"구조의이 종류 설명 클래스 :

이 질문 유창함 NHibernate에 어떤 관련이 있습니까
public class Person 
{ 
    public int Id { get; set;} 

    public string Name { get; set;} 

    public IList<PersonDepartment> Departments { get; set; } 
} 

public class PersonDepartment 
{ 
    public int Id { get; set; } 

    public Person Person { get; set; } 

    public Department Department { get; set; } 

    public bool IsPrimary { get; set; } 

    public string Office { get; set; } 
} 

public class Department 
{ 
    public int Id { get; set; } 

    public IList<PersonDepartment> Personnel { get; set; } 

    public string Name { get; set; } 
} 
+0

이것은 확실히 올바른 라인입니다. 어떤 이유로 저는 중간 엔터티 자체를 매핑해야한다고 생각하지 않았습니다. 이 관계는 지금 ​​당장은 사람마다 만 필요하기 때문에 인사는 필요하지 않습니다. 문제는 객체를 다시 가져 오기 전에 sql에서 중간을 탐색하는 데 익숙하지 않은, 최대 절전 모드가 아닌 방식으로이 객체를 얻는 것이 었습니다. 도와 줘서 고마워! – user676767