【问题标题】:What is Alternative for GetType().Name : for delete proxy from end of NameGetType().Name 的替代方法:从名称末尾删除代理
【发布时间】:2011-11-21 04:54:15
【问题描述】:

我有一个 NHibernate 实现并使用延迟加载的项目。当然已经在两个项目中实现了:一个项目用于 NHibernate 实现,第二个项目用于域实现。我在域项目中有一个实体,名称为:Person

Public Person : EntityBase
{

}

我通过这段代码加载了一个实体:

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

在我的域项目中通过此代码使用此实体:

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

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

我该怎么办?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • @lain 我编辑我的问题。我的方法是加载一个实体而不是一个人。感谢您的通知!
    • @Ehsan:那么第二种方法应该可以工作。我假设代理命名空间与域命名空间不同。我对代理不太熟悉。
    【解决方案2】:

    使用is 运算符。

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

    【讨论】:

      猜你喜欢
      • 2014-12-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多