2010-01-06 7 views
1

나는이로 노출되어 내 도메인 객체에 속성이 :NHibernate가 IList 프록시를 생성하는 것을 어떻게 확인할 수 있습니까?

public virtual IEnumerable<WorkPost> WorkPosts 
    { 
     get { return sheetPosts; } 
     private set 
     { 
      Guard.AssertAssignableFrom(value, typeof (IList<WorkPost>)); 
      sheetPosts = value as IList<WorkPost>; 
     } 
    } 

내부 표현은 IList<WorkPost>이고 당신이 볼 수 있듯이, (NHibernate에 오는 게으른 로딩 프록시) 할당 된 값 그런 다음 올바른 유형으로 변환됩니다. 이 구현은 NHibernate 프록시의 내부 표현에 의존하기 때문에 입안에서 나에게 나쁜 맛을 주었다. 목록의 의미를 다시 추가 정렬을 의미하기 때문에,

 HasMany(sheet => sheet.WorkPosts).KeyColumn("sheetId").AsList(); 

그러나이 요청한 것보다 나에게 더 많은 것을 주었다 NHibernate에 내가이 AsList() 선언 속성의 유창한 매핑을 만든 목록으로 프록시를 생성 있는지 확인하십시오 일부 추가 필드는 데이터베이스 모델 및 추가 쿼리 (커밋 할 때 정렬 필드 업데이트)로 인해 위의 "AsList"가야합니다.

프록시를 생성 할 때 NHibernate가 반환해야하는 인터페이스 유형을 어떻게 제어 할 수 있습니까? (참고 : 속성에서 IEnumerable 반환 유형을 변경하면 내가 찾는 답변이 아닙니다 :-))

답변

1

정렬 방식을 원하지 않는 경우 허용 여부에 따라 세트 나 가방을 사용해야합니다 요소를 복제했는지 여부. 자세한 내용은 documentation on collections입니다.

NHibernate에 콜렉션의 의미론에 매우 엄격한 :

  • 리스트 (IList 지속) 중복을 허용하고 정수로 인덱싱 될 수있는 정렬 된 집합이고;
  • map (지속 자 IDictionary)은 주어진 유형의 고유 키로 색인화 된 정렬되지 않은 모음입니다.
  • 집합 (Iesi.Collections의 ISet, 아마도 프레임 워크의 버전 4와 함께 제공되는 ISet을 사용합니다)은 중복을 허용하지 않는 순서가 지정되지 않은 모음입니다.
  • 가방 (지속 가능 ICollection 또는 IList이지만 색인 생성에 대해 보장하지 않음)은 중복을 허용하는 정렬되지 않은 모음입니다.
관련 문제