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"
我该怎么办?
您这样做是为了避免硬编码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代理对象的对象上获得实体类型?