2011-01-11 2 views
3

같은 클래스의 임의의 숫자 ContentItems을 N2의 페이지에 추가 할 수 있습니까? 그리고 그들은 중첩 될 수 있습니까?N2 CMS : 중첩 된 ContentItems 콜렉션이 가능합니까?

e.e. N2의 속성으로 ContentItems 컬렉션을 정의하는 방법이 있습니까? 가능한 경우 데이터를 중첩하여 데이터에 대해보다 의미있는 쿼리를 실행할 수도 있습니다. (즉, 쿼리하기 어려운 거대한 EditableTextRegions을 사용하는 대신

나는 현재 다음과 같은 모델을 '이상적'모델로 가지고 있습니다.이 모델을 N2ify 할 수 있습니까? 당신의 재산에 대신 가져 오기/SetDetail의 가져 오기/SetDetailCollection 사용 - 예

public class Link : ContentItem 
{ 
    public string Text { get; set; } 
    public string Title { get; set; } 
    public string Url { get; set; } 
} 

public class Panel : ContentItem 
{ 
    public string Title { get; set; } 
    public string Text { get; set; } 
    public List<Link> Links { get; set; } // Should show an expandable number of “Link” editors in the CMS editor 
    public string ImageUrl { get; set; } 
} 

public class Page : ContentItem 
{ 
    public string Title { get; set; } 
    public string BodyText { get; set; } 
    public List<Panel> Panels { get; set; } // Should show an expandable number of “Panel” editors in the CMS editor 
} 

답변

4

는 (I 명확성에 대한 속성과 N2 스타일의 getter/setter를 중단했습니다).

참고 : 2.1을 사용하는 경우 속성을 virtual으로 만들고 Get/SetDetail을 생략 할 수 있습니다. 그러나 이것이 DetailCollection 메서드에서 작동하는지는 확실하지 않지만 둘을 혼합 할 수는 있습니다.

나는 당신이 제안하고있는 것에 조심할 것입니다. 이렇게 중첩 된 콜렉션은 당신에게 SELECT N+1 라인을 다운시킬 수 있습니다. 디자인을 변경할 수 없다면 N2의 데이터베이스 캐싱 (단지 NHibernate의 2 차 레벨 캐시)을 켜는 것이 좋을 것입니다. 가능한 한 많은 데이터를 데이터베이스에 저장하지 않고 메모리에 보관합니다.

+0

답변을 주셔서 감사합니다. 지금은 다른 방법으로 하위 컬렉션을 반복하고 멤버를 적절한 유형으로 캐스팅했습니다. 또한 우리는 당분간 버전 2.0에 머물러 있습니다. (곧 설명 할 몇 가지 코드를 게시 할 것입니다 ... –

관련 문제