개체의 키 속성을 기반으로하는 값의 동일성을 구현하기 위해 추상 기본 클래스에서 Equals 및 GetHashCode를 재정의했습니다. 내 주된 목적은 Find 또는 FirstOrDefault 대신 컬렉션에 Contains 메서드를 사용하여 인스턴스가 이미 컬렉션에 추가되었는지 확인하는 것입니다.새 개체에 대한 값 평등 비교
public abstract class Entity
{
public abstract Guid Id { get; }
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
if (obj.GetType() != GetType())
{
return false;
}
var entity = (Entity)obj;
return (entity.Id == Id);
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
}
이 방법의 문제점은 지속 및 (NHibernate에 의해 생성) ID를 취득했습니다 전에 내 모든 오브젝트가 동일한 것입니다. 내가 잘못하고 있니? 생성자에서 ID를 생성 할 수 있지만 int ID를 사용하는 다른 프로젝트에 대해 동일한 패턴을 구현하고자하므로 분명히 작동하지 않습니다.
Equals를 재정의하는 모든 객체는 객체가 인스턴스화 된 직후 동일한 객체의 다른 인스턴스와 같습니다.
편집 추가 : 다음 날 우려하는 시나리오는 다음과 같습니다 추가 방법에서 내 컬렉션, 나는 컬렉션이 이미 객체가 추가 될 포함되어 있지 않은지 확인하기 위해 검사를하고 있습니다. new'ed up 객체가 모두 같다면, 두 개의 새로운 객체를 콜렉션에 추가 할 수 없습니다.
좋은 지적은 ... 나는 ISessions들 사이에 컬렉션에 대한 참조를 유지하지 않을 것이라고 생각합니다. –