GetType()的替代方法是什么?Name:用于从Name的末尾删除代理

本文关键字:Name 用于 代理 删除 是什么 方法 GetType | 更新日期: 2023-09-27 18:15:13

我有一个由NHibernate实现并使用延迟加载的项目。当然已经在两个项目中实现了:一个项目用于NHibernate实现,另一个项目用于Domain实现。我在域名项目中有一个实体,这个名字:Person

Public Person : EntityBase
{
}

我加载了一个实体:

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

在我的域项目中使用这个实体的代码:

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

问题在这里。strName在某些阶段是"Person",这是正确的,但有时strName"PersonProxy"

我该怎么办?

GetType()的替代方法是什么?Name:用于从Name的末尾删除代理

您这样做是为了避免硬编码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
}

使用is运算符

但是要小心:它通常与代理一起工作,但它不适用于用继承映射的实体的代理。其原因是代理类型仅扩展通过继承映射的实体的基类。但也有解决这个问题的方法,这里解释了一些:我如何在一个可能是NHibernate代理对象的对象上获得实体类型?