Я изо всех сил пытаюсь выяснить, как я должен переопределить 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 (поскольку, с одной стороны, это может привести к отложенной загрузке) ... а также из того, что я прочитал с использованием PK HistoricalPasswordId, нет-нет а также.
Кто-нибудь может дать какой-нибудь совет о том, как они переопределят равные для этого?
РЕДАКТИРОВАТЬ :::
Я думаю, что, возможно, немного вводил в заблуждение то, как я задал вопрос. Меня не смущает вопрос о том, как обеспечить соблюдение бизнес-правила, заключающегося в том, чтобы пароли не использовались повторно ... ни о том, как я знаю, равны ли два пароля или они безопасны. Что я действительно хочу знать, так это на уровне сущностей, конкретно относящихся к NHibernate, как бы я переопределил Equals для этого объекта, чтобы NHibenate не заканчивался дублированием в сеансе и / или кэше. Согласно документу NHibernate (https://www.hibernate.org/hib_docs/nhibernate/html/persistent-classes.html) я должен переопределить equals, используя равенство бизнес-ключей. В этом случае я просто не уверен, что использование ссылочного объекта User в сравнении является хорошей идеей.