Entity matching - sei sicuro? l'accendiamo?

Mi vergogno quasi ad ammetterlo, ma effettivamente non ci avevo mai pensato.
Questo fine settimana ho navigato un pò in internet, al fine di trovare qualche idea per arricchire ulteriormente il Domain Model dell'applicazione alla quale sto lavorando e, in particolar modo, definire il più elegantemente possibile un criterio per la comparazione delle entità. La parte che, tendenzialmente, tenevo meno in considerazione era quella relativa all'hashing dell'istanza. Il punto è che, in linea del tutto teorica, il metodo GetHashCode per due tipi differenti può restituire il medesimo valore.
public override Int32 GetHashCode()
{
    IEnumerable<PropertyInfo> signatureProperties = GetSignatureProperties();
    Int32 hashCode = GetType().GetHashCode();

    foreach (PropertyInfo property in signatureProperties)
    {
        Object value = property.GetValue(this, null);

        if (value != null)
            hashCode = hashCode ^ value.GetHashCode();
    }

    return signatureProperties.Any() ? hashCode : base.GetHashCode();
}
Il metodo GetSignatureProperties fornisce la collezione degli elementi a partire dai quali si determina l'hash.
Quest'ultimo, per le considerazioni di cui sopra, deve tenere conto anche del tipo dell'oggetto.
Insomma, io credo che la questione sia tutt'altro che banale, e questo post rappresenta a mio avviso un'autentica miniera di best-pratices.
Giusto a titolo di esempio, qualcuno si è mai posto il problema di valutare l'equivalenza tra una entity POCO e il suo proxy?
«ottobre»
domlunmarmergiovensab
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456