我正在努力弄清楚我应该如何覆盖 equals 并为我正在使用 NHibernate 编写的类获取哈希码。
基本业务场景是用户不能在 90 天内重复使用相同的密码。
所以我有一个“用户”,它有很多“历史密码”......用户类很简单,因为我只是在等号中使用登录名。下面是我的 HistoricalPassword 类。
public class HistoricalPassword
{
public virtual int HistoricalPasswordId { get; set; }
public virtual User User { get; set; }
public virtual DateTime ChangeDate { get; set; }
public virtual string FormerPassword { get; set; }
}
我会从商业角度说 User 和 ChangeDate 的组合会给我平等。但是......在 equals 方法中引用用户似乎不正确(因为一件事会导致延迟加载发生)......而且从我使用 HistoricalPasswordId 的 PK 阅读的内容来看,这是一个禁忌也是。
任何人都可以就如何为此覆盖 equals 提供一些建议吗?
编辑 ::: 我想我问这个问题的方式可能有点误导。对于如何执行确保密码不被重用的业务规则,我并不感到困惑……也不知道我如何知道两个密码是否相等或是否安全。我真正想知道的是与 NHibernate 相关的实体级别,我将如何覆盖该对象的 Equals,以便 NHibenate 不会在会话和/或缓存中出现欺骗。根据 NHibernate 文档(https://www.hibernate.org/hib_docs/nhibernate/html/persistent-classes.html),我应该使用业务密钥相等来覆盖equals。在这种情况下,我只是不确定在比较中使用 User 的引用对象是否是一个好主意。