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

时间:2020-03-05 18:49:11  来源:igfitidea点击:

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

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

现在,我需要使用IList标签或者ReadOnlyCollection标签将Articles标签映射到Article实体的只读集合中。

我已经查阅了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>

解决方案

回答

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

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

因此,如果我们希望返回一个IList,则可以使用&lt;list>映射。在情况下,我可能会使用&lt;list>映射进行映射。