2

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

标签表由 ArticleID(外键)和标签(varchar)组成。

现在我需要使用 IList 标签或 ReadOnlyCollection 标签将文章标签映射到文章实体上的只读集合。

我查阅了 NHibernate 参考资料,但我似乎无法确定何时使用 Set、Bag 和其他 Nhibernate 集合。我见过使用 ISet 集合的示例,但我真的不喜欢将我的实体类绑定到 NHibernate 类型。

如何在 NHibernate 中进行映射?

编辑:我最终使用了 a <bag>,因为它不需要索引:

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

1 回答 1

5

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

  • <list>直接映射到 IList 。
  • <map>直接映射到 IDictionary 。
  • <bag>映射到 IList 。A 不完全符合 IList 接口,因为 Add() 方法不能保证返回正确的索引。<bag>可以在不初始化 IList的情况下将对象添加到 a 。确保对 API 的使用者隐藏 IList 或使其有据可查。
  • <set>映射到 Iesi.Collections.ISet 。该接口是与 NHibernate 一起分发的 Iesi.Collections 程序集的一部分。

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

于 2008-09-08T05:57:37.000 回答