Wie erhalte ich den Entitätstyp für ein Objekt, bei dem es sich möglicherweise um ein NHibernate-Proxy-Objekt handelt?

Ich habe eine BasisklasseDomainObject für alle meine Geschäftsobjekte, die ich mit NHibernate verwende. Es enthält dasId Eigentum

public abstract class DomainObject
{
    public virtual int Id { get; private set; }
}

Ich möchte ein @ schreibIEqualityComparer, um meine Domain-Objekte zu vergleichen. Wenn zwei Objekte dasselbe @ habId und sind die gleiche Art von Objekt, die sie gleich sein sollten. Wenn ich jedoch @ benutGetType() Um den Typ des Objekts abzurufen, wird der Proxy-Typ NHibernate zurückgegeben. Also dieser Code:

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);
}

Funktioniert nicht richtig, da der Typ vonx is Asset aber die Art vony is AssetProxy21879bba3e9e47edbbdc2a546445c657.

Also, wie bekomme ich den Entitätstyp für ein Objekt, bei dem es sich möglicherweise um ein NHibernate-Proxy-Objekt handelt? im obigen BeispielAsset Anstatt vonAssetProxy21879bba3e9e47edbbdc2a546445c657?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage