문제

내 도메인 객체에 다음과 같이 노출되는 속성이 있습니다.

    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 프록시의 내부 표현에 의존하기 때문에 내 입안에서 나에게 나쁜 맛을 주었다. nhibernate가 프록시를 목록으로 생성하는지 확인하기 위해 AsList() 선언:

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

그러나 이것은 목록 시맨틱이 데이터베이스 모델에 몇 가지 추가 필드를 추가하고 추가 쿼리 (커밋시 정렬 필드의 업데이트로 인해)를 다시 추가하는 정렬을 암시하기 때문에 요청한 것보다 조금 더 많은 것을 주었다. 토고.

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

도움이 되었습니까?

해결책

의미론을 정렬하지 않으려면 중복 요소를 허용하는지 여부에 따라 세트 나 백을 사용해야합니다. 여기에 있습니다 컬렉션에 대한 문서 더 많은 정보를 위해서.

nhibernate는 컬렉션의 의미에서 매우 엄격합니다.

  • 목록 (지속됩니다 IList)는 복제를 허용하고 정수로 색인화 할 수있는 정렬 된 컬렉션입니다.
  • 지도 (지속됩니다 IDictionary)는 주어진 유형의 고유 키로 인덱싱 된 변형되지 않은 컬렉션입니다.
  • 세트 (지속됩니다 ISet IESI.Collections에서 아마도 사용될 것입니다 ISet 이는 프레임 워크의 버전 4와 함께 제공)는 중복을 허용하지 않는 변환되지 않은 컬렉션입니다.
  • 가방 (지속됩니다 ICollection 또는 IList 그러나 인덱싱 보장은 제공하지 않습니다)는 중복을 허용하는 변하지 않는 컬렉션입니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top