Как мне получить тип сущности для объекта, который может быть прокси-объектом NHibernate?

У меня есть базовый класс DomainObject для всех моих бизнес-объектов, которые я использую с NHibernate. Он содержит свойство Id .

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

Я хотел бы написать IEqualityComparer для сравнения моих объектов домена. Если два объекта имеют одинаковый Id и являются объектами одного типа, они должны быть равны. Однако, когда я использую GetType () для получения типа объекта, он возвращает тип прокси NHibernate. Итак, этот код:

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

Не работает правильно, потому что тип x - это Актив , а тип y - AssetProxy21879bba3e9e47edbbdc2a546445c657 .

Итак, как мне получить тип объекта на объекте, который может быть прокси-объектом NHibernate? т.е. в приведенном выше примере Asset вместо AssetProxy21879bba3e9e47edbbdc2a546445c657 ?

14
задан Jeff Walker Code Ranger 20 September 2010 в 21:57
поделиться