2008-09-08 3 views
2

내 데이터베이스에 두 개의 테이블이 있습니다. 기사 및 태그NHibernate를 사용하여 문자열 목록을 내 엔티티에 어떻게 매핑 할 수 있습니까?

태그 테이블은 ArticleID (외래 키)와 태그 (varchar)로 구성됩니다.

이제 기사 태그를 기사 엔터티의 읽기 전용 모음으로 매핑해야합니다 (IList 태그 또는 ReadOnlyCollection 태그 사용).

나는 NHibernate 참고 자료를 참조했지만 Set, Bag 및 다른 Nhibernate 컬렉션을 사용해야 할 때를 생각할 수 없다. 나는 ISet 컬렉션을 사용하는 예제를 보았지만 NHibernate 타입에 내 엔티티 클래스를 묶는 것을 좋아하지 않습니다.

어떻게 NHibernate에서 매핑을 할 수 있습니까?

편집 : 나는 인덱스를 필요로하지 않는 대신 <bag>를 사용하여 종료 :

<bag name="Tags" table="Tag" access="nosetter.camelcase" lazy="false"> 
    <key column="ArticleId" /> 
    <element column="Tag" type="System.String" /> 
</bag> 

답변

5

당신의 매핑에 사용하는 컬렉션의 유형은 코드에서 컬렉션을 표현하는 방법에 따라 달라집니다 . 설정은과 같이지도 :

  • <list>지도 직접 IList의 합니다.
  • <map>은 IDictionary에 직접 매핑됩니다.
  • <bag>은 IList에 매핑됩니다. A는 Add() 메서드가 올바른 인덱스를 반환하지 않으므로 IList 인터페이스를 사용하여 을 완전히 준수하지 않습니다. 은 IList를 초기화하지 않고 <bag>에 추가 할 수 있습니다. API의 사용자로부터 IList를 숨기거나 문서화가 잘되었는지 확인하십시오.
  • <set>은 Iesi.Collections.ISet에 매핑됩니다. 그 인터페이스는 NHibernate와 함께 배포 된 Iesi.Collections 어셈블리 의 일부입니다.

따라서 IList를 반환하려면 <list> 매핑을 사용합니다. 귀하의 경우 아마도 <list> 매핑을 사용하여 매핑 할 것입니다.