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?

posted @ lunedì 4 ottobre 2010 9.44

Print

Comments on this entry:

# re: Entity matching - sei sicuro? l'accendiamo?

Left by Aldo at 13/10/2010 9.34
Gravatar
La classe base e il suo proxy rappresentano la stessa entità quindi a mio avviso è corretto che restituiscano lo steso hash, io di solito nell'implementazione di equals della classe base testo il tipo e confronto la chiave naturale partendo dal presupposto che, per definizione, l'hash di una entity E' l'hash della sua chiave. Ciao.

Your comment:



 (will not be displayed)


 
 
 
Please add 4 and 1 and type the answer here:
 

Live Comment Preview:

 
«dicembre»
domlunmarmergiovensab
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567