나는 엔티티는 기본적으로 기본 키 비교하여 평등을 구현해야한다고 생각하지만, NHibernate에 문서 비즈니스 정체성을 사용하는 것이 좋습니다 : 식별자 값을 비교하여nhibernate : 평등을 구현하는 가장 좋은 방법은 무엇입니까?
가장 확실한 방법은 (같음을 구현하는 것입니다)/GetHashCode() 두 개체의 값이 같으면 둘 다 동일한 데이터베이스 행이어야하므로 동일합니다 (둘 다 ISet에 추가되면 ISet에 하나의 요소 만 포함). 불행히도, 우리는 그 접근법을 사용할 수 없습니다. Hibernate는 영속 객체들에 대해서만 식별자 값을 할당 할 것이고 새로 생성 된 인스턴스는 어떠한 식별자 값도 가지지 않을 것이다! 비즈니스 키 평등을 사용하여 Equals() 및 GetHashCode()를 구현하는 것이 좋습니다.
비즈니스 키 평등을 의미 같음() 메소드가 비지니스 키, 현실 세계에서 우리의 인스턴스를 식별하게 될 키 (천연 후보 키)
그리고 예를 형성하는 프로퍼티들만을 비교 (또한 문서에서) :
public override bool Equals(object other)
{
if (this == other) return true;
Cat cat = other as Cat;
if (cat == null) return false; // null or not a cat
if (Name != cat.Name) return false;
if (!Birthday.Equals(cat.Birthday)) return false;
return true;
}
이 비즈니스 정체성의 개념은 (예에 따라) 때문에 회전 내 머리는 내가 ValueObjects와 연관 의미의 유형은 기본적으로 문법으로 비교와 동일합니다 있어요 . 데이터베이스 기본 키를 비교 값으로 사용하지 않는 이유는 기본 키가 클라이언트 측에서 생성되지 않고 (예 : 증분) 사용자가 일종의 해시 테이블 콜렉션 (예 : ISet)을 사용하면 객체의 해시 코드가 변경되기 때문입니다. 엔티티 저장 용.
내가 평등/해시 코드 (http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx)에 대한 일반적인 규칙을 깰뿐만 아니라 NHibernate에 규칙을 준수하지 않는 좋은 평등 구현을 만들 수있는 방법 ?
왜 Equals를 사용하고 싶습니까? – apollodude217