NHibernate:覆盖 Equals 和 GetHashCode 的原因 [英] NHibernate: Reasons for overriding Equals and GetHashCode

查看:18
本文介绍了NHibernate:覆盖 Equals 和 GetHashCode 的原因的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在使用 NHibernate 时,是否有任何原因应在实体中覆盖 Equals 或 GetHashCode?这些理由在哪些情况下有效?

Are there any reasons why Equals or GetHashCode should be overriden in entities when using NHibernate? And in which scenarios are these reasons valid?

一些可以在网上找到的原因:

Some reasons that can be found on web:

  • 支持延迟加载.比较通过默认 Equals 代理对象方法可能会导致意外错误.但这应该通过以下方式解决身份地图(它确实在很多情况),不应该吗?当处理来自单个会话的实体时,即使没有覆盖 Equals/GetHashCode,一切都应该可以正常工作.在那里身份映射的任何情况发挥不好它的作用?
  • 这对于 NHibernate 集合很重要.是否存在 GetHashCode 的默认实现不充分的情况(不包括 Equals 相关问题)?
  • 混合多个实体会话和分离的实体.是吗这样做是个好主意吗?

还有其他原因吗?

推荐答案

重载 EqualsGetHashCode 方法很重要,如果您正在处理多个会话、分离的实体、无状态会话或集合(请参阅 Sixto Saez 的回答示例!).

Overloading the Equals and GetHashCode methods is important if you are working with multiple sessions, detached entities, stateless sessions or collections (see Sixto Saez's answer for an example!).

在同一会话范围内,身份映射将确保您只有同一实体的单个实例.但是,存在将实体与同一实体的代理进行比较的可能性(见下文).

In the same session scope identity map will ensure that you only have a single instance of the same entity. However, there is the possibility of comparing an entity with a proxy of the same entity (see below).

这篇关于NHibernate:覆盖 Equals 和 GetHashCode 的原因的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆