什么是GetType()的替代。名称:用于从名称末尾删除代理

时间:2011-11-21 04:54:15

标签: c# nhibernate lazy-loading lazy-evaluation

我有一个NHibernate实现的项目并使用Lazy Loading。当然已经在两个项目中实现:一个用于NHibernate实现的项目和一个用于域实现的第二个项目。我有一个名为Domain项目的实体: Person

Public Person : EntityBase
{

}

我通过以下代码加载了一个实体:

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

在我的Domain Project中使用此代码实现此实体:

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

问题在这里。 strName 在某个阶段“人物”并且它是正确的但有时 strName “PersonProxy”

我该怎么办?

2 个答案:

答案 0 :(得分:2)

你这样做是为了避免对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
}

答案 1 :(得分:2)

使用is运算符。

但要小心:通常它适用于代理,但它不适用于使用继承映射的实体的代理。原因是代理类型只扩展了由继承映射的实体的基类。但是这个问题有解决方法,有些解释如下:How do I get the entity type on an object that may be a NHibernate proxy object?