0

콘텐츠 (일대일) 관계가있는 아이콘이 있습니다.유창한 nhibernate 다형성. 클래스 유형을 확인하는 방법

public class Icon 
{ 
    public virtual Content Content {get; set;} 
} 

기본적으로 지연로드는 내가 원하는 것입니다. 내가 할, 그러나, 코드의 어떤 시점에서, 나는 컨텐츠의 종류

if(icon.Content is TextContent) 
{ 
... 
} 

아이콘 같은 콘텐츠 다형성되고, 뭔가 다른 관계의 일부입니다 무엇을 확인해야하며 자동으로 NHibernate에 의해 얻어진다 그것을 수동으로 얻지 마십시오.

이 경우 실제 유형을 확인하는 권장 방법은 무엇입니까?

실제 콘텐츠 형식을 식별하기 위해 열거 형인 ContentType과 같은 특정 속성을 가질 수 있지만 다른 방법이 있는지 알고 싶습니다.

답변

0

제안 해 주셔서 감사하지만 한편으로는 재미있는 해결책을 발견했습니다.

Visitor 패턴을 사용하여 IconContent 방문자를 정의하고 실행할 작업을 전달할 수 있습니다.

IconContentVisitor.Func(()=> { Console.WriteLine("this is TextContent"; },()=> { Console.WriteLine("this is ImageContent")); 

아이디어는 여기에서 온 : http://mookid.dk/oncode/archives/991

예, 거기는 TextContent이와 ImageContent, 그것은 이런 식으로 뭔가있을 것입니다 가정에 대한
0

그런 종류의 검사를 수행하려면 속성에서 프록시를 제거해야합니다. 제거를 강제로

session.PersistenceContext.Unproxy(icon.Content); 
  • 은 (가능한 경우 기본 클래스에서) 가상 메소드를 구현 :

    1. 당신이 세션 호출에 액세스 할 수있는 경우 : 그것을 할 수있는 몇 가지 방법이있다 적절한 유형의 인스턴스를 리턴하여 프록시의.

      public virtual U As<U>() where U : YourType { 
          return this as U; 
      } 
      
    2. 속성의 지연 초기화를 비활성화합니다.

  • 0

    이것은 another recent question과 매우 유사합니다. "= '게으른 사용하는 것입니다

    public virtual void Self 
    { 
        get { return this; } 
    } 
    

    그리고 다섯 번째 방법 : csanchez의 목록에 추가

    는 네 번째 방법은 않은 프록시 형식을 반환하는 내용의 기본 클래스에 Self 속성을 추가하는 것입니다 no-proxy "를 매핑 as described on Ayende's blog에 매핑합니다.

    관련 문제