如何使用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>
解决方案
回答
在映射中使用的集合类型取决于我们要如何在代码中表示集合。设置映射如下:
<list>
直接映射到一个IList。<map>
直接映射到IDictionary。- <bag>映射到一个IList。 A不完全符合IList接口,因为不能保证Add()方法返回正确的索引。可以在不初始化IList的情况下将对象添加到<bag>中。确保对用户的API隐藏IList或者对其进行详细记录。
- <set>映射到Iesi.Collections.ISet。该接口是随NHibernate一起分发的Iesi.Collections程序集的一部分。
因此,如果我们希望返回一个IList,则可以使用<list>
映射。在情况下,我可能会使用<list>
映射进行映射。