Mam podstawową klasę DomainObject
dla wszystkich moich obiektów biznesowych, których używam z NHibernate. Zawiera właściwość Id
.Jak uzyskać typ jednostki na obiekcie, który może być obiektem proxy NHibernate?
public abstract class DomainObject
{
public virtual int Id { get; private set; }
}
Chciałbym napisać IEqualityComparer
, aby porównać moje obiekty domeny. Jeśli dwa obiekty mają ten sam obiekt Id
i są tym samym rodzajem obiektu, powinny być równe. Jednak gdy używam GetType()
, aby uzyskać typ obiektu, zwróci on typ proxy NHibernate. Więc ten kod:
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);
}
nie działa poprawnie, ponieważ rodzaju x is Asset
ale rodzaj y is AssetProxy21879bba3e9e47edbbdc2a546445c657
.
Jak zatem uzyskać typ jednostki na obiekcie, który może być obiektem proxy NHibernate? tj. w powyższym przykładzie Asset
zamiast AssetProxy21879bba3e9e47edbbdc2a546445c657
?
jestem 99% pewien, że jest to duplikat, ale jestem zbyt leniwy, aby go teraz szukać: -) –
Proszę pokazać mi ten, który duplikuje, wyglądałem na cały stackoverflow dla niego. –