如何使用NHibernate将字符串列表映射到我的实体?

时间:2008-09-08 05:51:35

标签: nhibernate

我的数据库中有两个表:文章和标签

Tags表由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>

1 个答案:

答案 0 :(得分:5)

映射中使用的集合类型取决于您希望如何在代码中表示集合。设置映射如下:

  • <list>直接映射到 的IList。
  • <map>直接映射到IDictionary。
  • <bag>映射到IList。 A不完全符合 与IList接口因为 不保证Add()方法 返回正确的索引。一个东西 可以在没有<bag>的情况下添加到<set> 初始化IList。确保 要么隐藏IList 您的API的消费者或制作它 记录完备。
  • <list>映射到Iesi.Collections.ISet。那 界面是其中的一部分 Iesi.Collections汇编 与NHibernate一起发布。

因此,如果您想要返回IList,那么您将使用<list>映射。在您的情况下,我可能会使用{{1}}映射进行映射。