博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NHibernate 集合映射深入 (第五篇) <set>,<list>,<map>,<bag>
阅读量:5930 次
发布时间:2019-06-19

本文共 1629 字,大约阅读时间需要 5 分钟。

一、集合外键

  在NHibernate中,典型的用于映射集合类的元素有<set>,<list>,<map>,<bag>,<array>,<primitive-array>。

  我们回到上一篇,集合映射基础当中的一对多查询。对于集合类型:

public virtual ISet
ListPerson { get; set; }

  NHibernate的配置文件与之对应的是:

  那么<set>、<list>、<map>、<bag>、<array>、<primitive-array>这些东西的用法以及它们之间的区别是什么呢?

  1.<set>

  ISet<Model>集合中的对象是唯一的,无序的,不能通过索引、key值访问。

  在.Net中并没有与<set>对应的类。因此当我们的配置文件是<set>配置集合关系的时候,Model持久化类中ISet<Model>必须使用NHibernate的Iesi.Collections的。 

  2.<bag>

  <bag>跟<set>基本一样,唯一不同之处在于bag中允许重复对象。
  与<bag>配置对应的集合类型是IList<Model>。

  3.<list>

  有序集合,可以重复,使用从0开始的整数作为索引。因此,在配置<list>节点的时候必须要有<index>,并且index指定的列类型必须为整型。
  与<list>配置对应的集合类型是IList<Model>。

  4.<map>

  无序集合,key值不能重复,值可以重复,可以使用任意类型的对象作为索引。
  与<map>配置对应的集合类型是IDictionary<key,value>。

  首先我们根据数据之间的关系,从<set>, <bag>, <list>, <map>中选择合适的映射配置节点。下表是配置节点与接口类型对应关系:

  对应的集合属性必须使用接口声明,因为NHibernate返回的集合对象类型,是它内部对这些接口的实现,即NHibernate.Collection命名空间下的PersistentSet、PersistentList、PersistentBag、PersistentMap,而不是ListSet、HashTable等。按照NHibernate的规定使用这些接口的具体类,NHibernate在存取时能够自动转换处理。

  .Net中没有set和bag的实现,所以NHibernate使用Iesi.Collections的set,使用IList模拟bag语义。

  如果属性不希望使用这些接口,可以使用access。将field设置为接口类型,在property的get, set方法中完成类型转换,通过属性配置中的access设置,让NHibernate绕开get, set方法直接存取field。

   <map>与<list>的区别在于,<list>的index是整型,而<map>的index可以为任意类型,所以<map>中的<index>节点可以指定type属性。有的情况下,可能通过关联使用其它实体作为index,因此NHibernate为<map>提供了另外一种index配置方式,<index-many-to-many>和<index-many-to-any>。其它配置跟<set>一样。

  set bag list map
是否允许重复 key不能重复,值可以重复
显式排序
对一个类型 Iesi.Collections.ISet IList IList IDictionary

  四者的差别就在上面,可以根据实际情况,进行选用。

 

 

 

转载地址:http://hbktx.baihongyu.com/

你可能感兴趣的文章
小程序弹性Web之旅
查看>>
[喵咪Golang(1)]Go语言开篇
查看>>
SQL Server存储过程
查看>>
HTML 控制密码框的可见和隐藏
查看>>
pg_cancel_backend()和pg_terminate_backend()
查看>>
Java Web之网络通讯
查看>>
SVG实例之中国地图
查看>>
css3选择器(一)
查看>>
windows hosts文件备忘
查看>>
实现蜘蛛捕捉的PHP代码
查看>>
袋鼠宝宝们,出来见客啦
查看>>
信息摘要算法-CRC(循环冗余校验)
查看>>
Guice系列之用户指南(一)
查看>>
会话管理之Cookie技术
查看>>
Activiti 由bpmn文件到BpmnModel实体类转换
查看>>
Laravel5做权限管理
查看>>
EasyUI----DataGrid 导出 Excel
查看>>
领域驱动设计常见问题FAQ
查看>>
测试框架 Mocha 实例教程
查看>>
阿里百川与极客邦科技达成战略合作 Weex宣布开源
查看>>