Entity Framework 엔티티와 비교할 수있는 코드가 있습니다.POCO 비교자가 작동하지 않습니다.
그러나 논리적 관점에서 볼 때 실제로 false (일치하지 않음)를 반환하는 것으로 나타났습니다.
HashSet 때문에 실패합니다. 비교할 때 항상 false를 반환합니다. HashSet은 일반적으로 비교할 필요가없는 다른 엔티티에 대한 탐색 링크입니다.
올바르게 작동시키기 위해이 코드를 수정할 수 있습니까?
namespace Common.Helper
{
public sealed class PocoHelper<TPOCO> : IEqualityComparer<TPOCO> where TPOCO : class
{
public bool Equals(TPOCO poco1, TPOCO poco2)
{
var t = typeof(TPOCO);
if (poco1.IsNotNull() && poco2.IsNotNull())
{
bool areSame = true;
foreach(var property in typeof(TPOCO).GetPublicProperties())
{
object v1 = property.GetValue(poco1, null);
object v2 = property.GetValue(poco2, null);
if (!object.Equals(v1, v2))
{
areSame = false;
break;
}
};
return areSame;
}
return poco1 == poco2;
}
public int GetHashCode(TPOCO poco)
{
int hash = 0;
foreach(var property in typeof(TPOCO).GetPublicProperties())
{
object val = property.GetValue(poco, null);
hash += (val == null ? 0 : val.GetHashCode());
};
return hash;
}
}
}
IEqualityComparer – IamStalker
을 사용해야합니다. 따라서 비교에서 HashSets를 제외시키는 방법을 찾아야합니다. 너무 어렵지 않아야합니다. –
@IamStalker - 자세히 설명해 주시겠습니까? – dotnetnoob