2012-11-27 2 views
1

나는 이것을 풀려고 노력하고 있지만 지금까지 할 수는 없다. 모든 종류의 오류. nhibernate 다 대다 매핑 세 개의 테이블. jumpstart

다음은 내 DB의 테이블입니다

는 사람 (personID, 이름, 나이)

역할 (역할 ID, roleName)

PersonRoles (personRolesID, personID, 역할 ID)

이 내입니다 도메인 등급

public Person 
{ 
public virtual Roles RolesForThisPerson {get;set;} 
public virtual string Name {get;set;} 
public virtual int Age {get;set;} 
} 

public Roles 
{ 
public virtual IList<string> RoleList {get;set;} 
} 

나는 이걸 뿌려주세요. 나는 세트, 가방,리스트에 대해 너무 혼란 스럽다. 나는 어디서부터 시작할 지조차 모른다.

아무도 여기에 약간의 푸시를 줄 수 있습니까?

감사

답변

2

은 그대로의가 DB 스키마를 유지하자 먼저 C#을 도메인 클래스를 조정 :이 두 기관에 대한

public class Person 
{ 
    public virtual string Name {get;set;} 
    public virtual int Age {get;set;} 
    public virtual IList<Role> RolesForThisPerson {get;set;} 
} 
public class Role 
{ 
    public virtual string RoleName { get; set; } 
} 

이제 기본 매핑을 정의 테이블에 :

<class name="Person" table="Person" lazy="true"> 
    <id name="ID" column="personID"> 
     <generator class="native" /> 
    </id> 
    <property name="Name" not-null="true" /> 
    <property name="Age" not-null="true" /> 

    <!-- placeholder for roles --> 

</class> 

<class name="Role" table="Role" lazy="true"> 
    <id name="ID" column="roleID"> 
     <generator class="native" /> 
    </id> 
    <property name="RoleName" not-null="true" /> 
</class> 

이제 <idbag> 매핑을 사용하고 Person 클래스 매핑을 다음과 같이 확장 할 수 있습니다.

<idbag name="RolesForThisPerson" batch-size="25" table="PersonRoles" 
    inverse="true" lazy="true" cascade="none" > 
    <collection-id column="personRolesID" type="System.Int32" > 
     <generator class="native" /> 
    </collection-id> 
    <key column="personID" />    
    <many-to-many class="Role" column="roleID" /> 
</idbag> 

<idbag>은 페어 테이블에도 자체 식별자가 있다는 사실로부터 이익을 얻을 수 있습니다. 계단식은 none으로 설정되어 시스템에 역할이 있음을 예상하고 사용자는 자신에게만 할당됩니다 (제거됨). 속성 batch-size은 지연 롤 컬렉션을 가져올 때 실행될 SELECT 문 수에 영향을줍니다.

+0

, 감사합니다. 지금은 조금 분명해진다. 너는 몇 가지 질문을한다. 나는 모델링 클래스 (DDD)에 관한 그 블로그 중 하나를 읽었고, 그 콜렉션을 캡슐화하는 객체 (개인적으로는 추상화의 낭비라고 생각하는)보다는 엔티티에 컬렉션이 있어야한다고 생각했습니다. 따라서 역할과 컬렉션을 보여주는 내 예입니다. 이것에 대한 의견? Inverse = true ... 나는 지금이 연구를하고있다. –