2010-11-26 2 views
1

데이터베이스와 동기화 된 엔티티 개체가 있습니다. 나는 일반적으로 다음 세 가지 비교에서이 엔티티를 사용합니다.두 엔티티가 동일한 db 엔티티를 참조하는지 확인하는 방법을 호출해야합니까?

  1. 두 엔티티 개체가 동일한 CLR 개체인지 확인합니다.
  2. 두 엔티티 개체의 모든 속성이 동일한 지 확인하십시오.
  3. 일부 속성이 다른 경우에도 두 엔터티 개체가 동일한 데이터베이스 엔터티를 참조하는지 확인하십시오.

1에 대해서는 Object.ReferenceEquals()를 사용합니다. 2에 대해 모든 특성을 검사하여 Equals()를 덮어 씁니다. 3은 약간 일관성이 없습니다. 일부 엔티티에는 "일치"메소드가 있으며 일부에는 "IsSame"메소드가 있습니다. 이 방법의 논리는 기본 키와 아직 데이터베이스에 의해 할당되지 않은 경우 보조 키 (있는 경우)를 비교합니다.

Equals를 사용하여 키를 비교 한 경우 (예 : Contains()를 사용하여 목록을 확인할 수 있음) 많은 코드 시나리오가 더 쉬울 수 있지만 Equals가 키를 비교하고 비교하지 않으면 혼란 스럽습니다. 모든 속성을 확인하십시오.

내 시나리오는 자체 추적 엔티티가있는 N 계층 시스템입니다. 나는 다른 엔티티에서 도착한 업데이트 된 엔티티와 엔티티 또는 이와 유사한 목록을 업데이트해야하는 경우가 종종 있습니다.

두 엔티티가 동일한 논리적 엔티티를 참조하는지 확인하는 방법에 대한 합의가 있습니까? KeyEquals()? SameEntity()?

답변

2

DbEquivalent()?

+1

+1 - 분명히 이것이 DB 비교라고 분명히해야한다는 것에 동의합니다. –

+0

나쁘지는 않지만 데이터베이스에서의 지속성을 언급하는 것은 너무 구체적입니다. 엔티티가 공유하는 것은 키이고, 동일한 "물리적 인"것을 말하지만, 데이터베이스에 저장되는 것은 "우연의 일치"입니다. – Holstebroe

+0

@Holstebroe : 제 경우에는 ID를 사용할 때마다 데이터 저장소로 무언가를하려고하기 때문입니다. 동일한 ID를 가진 두 엔티티가 동일한 '물리적 인'것이고, ID는 데이터 저장소 수준의 관심사라는 것에 동의하지 않습니다. – UpTheCreek

관련 문제