2011-05-06 2 views
2

최근 Fluent NHibernate의 Automapping에서 이상한 행동을 보았습니다. 나는 다음과 같은 클래스 구조를 가지고있다. (어떤 속성은 양조를 위해 끊어짐).NHibernate 자동 매핑 문제

public class UserGroup 
{ 
    public virtual UserGroup ParentGroup { get; set; } 

    public virtual UserGroupMember Manager { get; protected set; } 

    public virtual ISet<UserGroupMember> Members { get; protected set; } 
} 

및 사용자 그룹에 대한

public class UserGroupMember : BaseEntity 
{ 
    public virtual User User { get; set; } 

    public virtual UserGroup Group { get; set; } 
} 

맵핑 다음 자동 매핑은 UserGroupMember 테이블의 두 열 (외부 키이다 둘 다)를 생성

public class UserGroupMap : IAutoMappingOverride<UserGroup> 
{ 
    public void Override(AutoMapping<UserGroup> mapping) 
    { 
     mapping.HasMany(el => el.Members) 
      .Cascade 
      .AllDeleteOrphan().Inverse().LazyLoad(); 
    } 
} 

은 사용자 그룹 간의 관계를 반영 및 UserGroupMembers. (아래와 같이) 나는 생성 된 매핑이 잘못 열이 포함되어 있음을 발견했습니다

잘못된 쿼리 결과
<set cascade="all-delete-orphan" inverse="true" lazy="true" name="Members" mutable="true"> 
    <key> 
     <column name="Parent_Id" /> 
    </key> 
    <one-to-many class="Groups.Data.UserGroupMember, Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</set> 

:

  1. UserGroupMember에서 삽입을하는 동안 - (오른쪽이다) GROUP_ID 사용 선택 UserGroupMember 년 동안 PARENT_ID
  2. 사용하지 - PARENT_ID는

GROUP_ID 사용하면 그룹 PROPERT을 반영 UserGroupMember 매핑 파일의 열입니다 UserGroupMember의 y입니다.

.KeyColumn ("Group_Id")을 추가하는 매핑을 수정하려했으나 문제가 해결되었습니다. 그러나 Fluent NHibernate를 '올바른 방향으로 생각하게'하는 방법이 있습니까?

답변

0

테스트 코드가 준비되지 않았으므로 이것은 메모리에 있습니다.

양방향 many-to-many를 사용할 때, 양쪽 모두가 "비슷하지"않다면 FHN Figure 컬럼 이름을 도와야합니다.

예를 들어이 correcly

public class User 
{ 
    public IList<Group> Groups { get; set; } 
} 

public class Group  
{ 
    public IList<User> Users { get; set; } 
} 

를 매핑해야합니다 동안이하고자하지

public class User 
{ 
    public IList<Group> BelongsTo { get; set; } 
} 

public class Group  
{ 
    public IList<User> Contains { get; set; } 
} 
엄지 손가락의 규칙으로

(또는 규칙없이) 자동 매핑 잘 열 이름을 생성하지 않는 경우, 특히 중요하지 않은 경우에는 주저없이 해당 열 이름을 수동으로 설정해야합니다.

+0

나는 그런 경우가 아니라고 생각합니다. 그것은 일대 다 (One-To-Many) 관계입니다. 나는이 문제가 내가 UserGroupMember 인 하나의 속성과 ISet 를 가질 수 있다고 생각한다. –