2011-11-21 2 views
2

나는 Hibernate 구현과 Lazy Loading을 사용하는 프로젝트를 가지고있다. 물론 NHibernate 구현을위한 하나의 프로젝트와 도메인 구현을위한 두 번째 프로젝트로 구현되었습니다. 사람GetType() 대신 사용할 수있는 이름 : 이름 끝에서 이름을 삭제하기위한 프록시

Public Person : EntityBase 
{ 

} 

이 코드에 의해 개체를로드 :이 코드에 의해이 엔티티의 내 도메인 프로젝트 사용에

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

:이 이름으로 도메인 프로젝트의 실체가

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

문제는 여기에 있습니다. 어떤 단계에서 strName"사람"이며 정확하지만 가끔은 strName"PersonProxy"

어떻게해야합니까 무엇입니까?

답변

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 
} 
+0

@lain 제 질문을 편집합니다. 내 방법은 사람 대신 엔티티를로드하는 것입니다. 귀하의 통지에 감사드립니다! – Ehsan

+0

@ 남산 : 두 번째 방법이 효과적입니다. 프록시 네임 스페이스가 도메인 네임 스페이스와 같지 않다고 가정했습니다. 나는 프록시에 익숙하지 않다. – Iain

2

is 연산자를 사용하십시오.

주의 : 일반적으로 프록시와 함께 작동하지만 상속으로 매핑 된 엔티티의 프록시에서는 작동하지 않습니다. 그 이유는 상속에 의해 매핑 된 엔터티의 기본 클래스 만 프록시 형식으로 확장하기 때문입니다. 그러나이 문제에 대한 해결 방법이 있습니다. 일부는 여기에 설명되어 있습니다. How do I get the entity type on an object that may be a NHibernate proxy object?

관련 문제