Ho una classe base DomainObject
per tutti i miei oggetti business che sto utilizzando con NHibernate. Contiene la proprietà Id
.Come si ottiene il tipo di entità su un oggetto che potrebbe essere un oggetto proxy NHibernate?
public abstract class DomainObject
{
public virtual int Id { get; private set; }
}
Vorrei scrivere un IEqualityComparer
per confrontare i miei oggetti di dominio. Se due oggetti hanno lo stesso Id
e sono dello stesso tipo di oggetto dovrebbero essere uguali. Tuttavia quando uso GetType()
per ottenere il tipo dell'oggetto, restituirà il tipo di proxy NHibernate. Quindi, questo codice:
bool IEqualityComparer.Equals(object x, object y)
{
// null checking code skipped here
if(x is DomainObject && y is DomainObject)
{
return ((DomainObject) x).Id == ((DomainObject) y).Id
&& x.GetType() == y.GetType();
}
return x.Equals(y);
}
non funziona correttamente, perché il tipo di x is Asset
ma il tipo di y is AssetProxy21879bba3e9e47edbbdc2a546445c657
.
Quindi, come si ottiene il tipo di entità su un oggetto che può essere un oggetto proxy NHibernate? vale a dire nell'esempio sopra Asset
anziché AssetProxy21879bba3e9e47edbbdc2a546445c657
?
Sono sicuro che il 99% si tratta di un duplicato, ma sono troppo pigro in questo momento per la ricerca è: -) –
Mostrami quello che duplica, ho cercato tutto lo stackoverflow per questo. –