我有一个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”
我该怎么办?
答案 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?