Fluent NHibernate 映射为 Bag 还是 List?有什么区别?

发布于 2024-08-12 08:52:39 字数 32 浏览 3 评论 0原文

映射到需要由其父级管理的实体列表的最佳实践是什么?

What's the best practice to map to a list of entities that need to be managed by their parent?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

☆獨立☆ 2024-08-19 08:52:39

区别在于语义:

  • 当您的集合无序并且只能在
  • bag 仍然无序时才能包含每个项目时,应该使用 set - 它可以包含许多项目次(嗯 - 至少对于多对多映射)
  • 列表是一个有序的集合,可以多次包含某些项目 - 您可以保证,这些项目将在同一个中检索保存时的顺序(NHibernate 将为您管理指定的索引列)

但是,bag 和 list 都可以用 IList<> 表示;在代码中 - 完全没问题,但你必须记住,你不能依赖包中物品的顺序。

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

旁注:可以控制包中项目的顺序 - 您必须使用适当的 sql 表达式指定 order-by 属性。但是,不要使用它来模拟 list 行为 - 直接使用 list 。当顺序是某些其他属性的结果时,例如按上次修改的时间戳对实体进行排序,则应使用 bag 的 Order-by 属性。

Difference is semantic:

  • a set should be used, when your collection is unordered and can contain each item only once
  • a bag is still unordered, however - it can contain some items many times (well - at least with many-to-many mappings)
  • a list is a collection that is ordered and can contains some items many times - you have a guarantee, that items will be retrieved in the same order as they were saved (NHibernate will manage specified index column for you)

However, both bag and list can be represented with IList<> in code - that's perfectly ok, but you have to remember that you cannot rely on order of items in a bag.

When choosing how to map your list, choose the option that best matches your collection - if you don't need order, choose bag, if you need order - choose list.

Sidenote: there's a possibility to control order of items in bag - you have to specify order-by attribute with appropriate sql expression. However do not use this to emulate list behavior - use list directly. Order-by attribute for bags is meant to be used, when order is a result of some other attributes - like ordering of entities by timestamp of last modification.

柒夜笙歌凉 2024-08-19 08:52:39

我发现的所有示例都使用 IList,这就是我在代码中使用的。

我认为 Bag 可能是原始 Java Hibernate 的遗留物 - 我依稀记得读过一篇大意如此的帖子。

All the examples I've found use IList<>, and that's what I use in my code.

I think Bag may be a leftover from the original Java Hibernate - I vaguely remember reading a posting to that effect.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文