NHibernate的:原因压倒一切的Equals和GetHash code [英] NHibernate: Reasons for overriding Equals and GetHashCode

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

问题描述

是否有任何理由相等于或GetHash code,应在实体使用NHibernate时重写?而在这情况下是这些理由是否有效?

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 / GetHash code。在那儿 当标识映射做任何情况下, 没有发挥好它的作用是什么?
  • 这是NHibernate的集合重要。是否有任何情况下,当GetHash code默认实现不充分(不包括的Equals相关的问题)?
  • 混合从几个实体 会话和独立的实体。是吗 好主意,这样做?
  • Support for lazy loading. Comparing proxy objects via default Equals method can lead to unexpected bugs. But this should be resolved by identity map (and it really is in many cases), should not it? When working with entities from single session everything should work fine even without overriding Equals/GetHashCode. Are there any cases when the identity map does not play well it‘s role?
  • It is important for NHibernate collections. Are there any cases when default implementation of GetHashCode is not sufficient (not including Equals related issues)?
  • Mixing entities from several sessions and detached entities. Is it good idea to do so?

任何其他的原因?

推荐答案

重载等于 GetHash code 方法是很重要的,如果你正在使用多个会话,独立的实体,无状态的会话或集合(见西斯托·赛斯的回答的例子!)。

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和GetHash code的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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