Что такое Альтернатива для GetType (). Имя: для удаления прокси с конца имени - PullRequest
2 голосов
/ 21 ноября 2011

У меня есть проект, реализованный NHibernate и использующий Lazy Loading. Конечно, были реализованы два проекта: один проект для реализации NHibernate и второй проект для реализации домена. У меня есть объект в доменном проекте с таким именем: Person

Public Person : EntityBase
{

}

Я загрузил объект по этому коду:

TEntity entity = SessionInstance.Load<TEntity>(110);

В моем доменном проекте использование этого объекта по этому коду:

string strName = entity.GetType().Name;
if(strName == "Person")
{
    //My Code
}

Проблема здесь. strName на некоторой стадии "Person" и это правильно, но иногда strName is "PersonProxy"

Что мне делать?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Используйте оператор is.

Но будьте осторожны: обычно он работает с прокси, но не работает с прокси сущностей, которые отображаются с наследованием.Причина этого заключается в том, что тип прокси расширяет только базовый класс сущности, отображаемой с помощью наследования.Но есть обходные пути для этой проблемы, некоторые объясняются здесь: Как получить тип сущности для объекта, который может быть прокси-объектом NHibernate?

2 голосов
/ 21 ноября 2011

Вы делаете это, чтобы избежать жесткого кодирования строки Person? Если это так, я бы сделал следующее:

typeof(Person).Name

Если это должно быть динамически, возможно, это будет работать

    public String GetDomainName(Type type)
    {
        var isNotFromDomain = type.Namespace != typeof(Person).Namespace;
        if (isNotFromDomain)
            return GetDomainName(type.BaseType);
        return type.Name;
    }

И, наконец, основываясь на вашем обновленном коде, я предлагаю вам рассмотреть следующее. Мне нравится избегать жестко закодированных строк.

if (entity is Person)
{
    //My Code
}
...