流畅的nhibernate映射作为Bag List有什么区别?

Che*_*rot 2 fluent-nhibernate

最好的做法是映射到需要由其父级管理的实体列表

mac*_*kow 5

差异是语义的:

  • 应使用,当你的收藏是无序的,并且只能包含一次每个项目
  • 然而,一个仍然是无序的 - 它可以多次包含一些物品(好 - 至少有多对多的映射)
  • 一个列表是一个有序的集合,可以多次包含一些项目 - 你有一个保证,项目将按照保存的顺序检索(NHibernate将为你管理指定的索引列)

但是,包和列表都可以用代码中的IList <>表示 - 这是完全正常的,但你必须记住,你不能依赖于包中的物品顺序.

在选择如何映射列表时,请选择最适合您的收藏的选项 - 如果您不需要订单,请选择,如果您需要订单 - 请选择列表.

旁注:有可能控制包中物品的顺序 - 您必须使用适当的sql表达式指定order-by属性.但是,不要使用它来模拟列表行为 - 直接使用列表.当订单是某些其他属性的结果时,也可以使用bag s的order-by属性- 例如按上次修改的时间戳排序实体.