2008-09-08 1 views
2

私のデータベースには2つのテーブルがあります:記事とタグNHibernateを使用して文字列のリストをエンティティにマップするにはどうすればよいですか?

タグテーブルは、ArticleID(外部キー)とTag(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インターフェイスで を完全に遵守していません。オブジェクト を<bag>に追加して、 IListを初期化せずに追加できます。 APIの ユーザーからIListを非表示にするか、または に文書化してください。
  • <set>はIesi.Collections.ISetにマップします。その インターフェイスは、NHibernateと共に配布される Iesi.Collectionsアセンブリ の一部です。

したがって、IListを返す場合は、<list>マッピングを使用します。あなたの場合は、おそらく<list>マッピングを使用してマップします。

関連する問題