N2 CMS:ContentItems的嵌套集合可能吗?

时间:2011-01-11 11:58:29

标签: c# collections nested n2 n2cms

可以在N2中的页面中添加任意数量的同一类ContentItems吗?它们可以嵌套吗?

即。有没有办法在N2中定义ContentItems作为属性的集合?如果可能的话,我也想嵌套它们,这样我们就可以针对数据运行更有意义的查询。 (即,不要使用难以查询的巨大EditableTextRegions。)

我目前将以下型号视为“理想”,这可以通过N2化吗? (为了清楚起见,我省略了属性和N2风格的getter / setter)

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
}

1 个答案:

答案 0 :(得分:4)

是 - 在您的媒体资源中使用Get / SetDetailCollection代替Get / SetDetail。

仅供参考,如果您使用的是2.1,您可以创建属性virtual并取消Get / SetDetail - 但不确定这是否适用于DetailCollection方法,但您可以将两者混合使用。

我会小心你提出的建议 - 像这样的嵌套集合可能会导致你SELECT N+1问题。如果你不能改变设计,那么我建议打开N2的数据库缓存(这只是NHibernate的二级缓存),这种方式尽可能保留在内存中,而不会过多地访问数据库。