当前位置:  开发笔记 > 编程语言 > 正文

NHibernate ISet与IList

如何解决《NHibernateISet与IList》经验,为你挑选了2个好方法。

在大多数NHiberate示例中,他们使用ISET而不是IList.我知道两者之间的基本差异, 一组是独一无二的.但是,我不确定为什么他们在进行延迟加载时使用ISet而不是IList.

(Iesi.Collections.Generic)ISet对IList有什么好处?延迟加载时的特殊性.



1> Reed Copsey..:

我相信这主要归功于NHibernate的java遗产.

请参阅持久性集合的FAQ条目.具体提到Java默认情况下如何包含更多集合C#,它们特别映射到ISet.

我相信大多数样本使用它的原因主要是因为这在Java中更常见,并且样本是从Java移植的.(有些样本使用set而不需要它成为一组......)

话虽如此,但是对于集合与列表存在明显的差异.行为是不同的,因此有一些用例,其中集合的行为更合适.对于延迟加载,这允许您减少对加载的订单的限制,因此您可以加载较少的信息并保持接口合同到位.



2> ShuggyCoUk..:

set接口仅表示生成的集合可以是:

    测试会员资格

    以某种任意顺序枚举(可能会改变)

列表界面表示第一个,但第二个表示更强,订单定义明确,除非有什么指示,否则不会改变.

通过使用限制较少的合同(集合),您可以获得更多的自由(例如,您可以按任何顺序加载集合,如果此顺序不一致,则任何使用您的类的人都不应该关心)

我在这里掩盖了这样一个事实,即集合进一步确保它不能包含重复项(这是对实现者的约束).但是,如果你需要存储这样的实例,那么集合将是不可接受的,所以这不再是一个问题,而是变成一个积极的.消费者的工作变得更加容易,因为他们不必担心存在重复的问题已经得到了保证.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有