N2 CMS: возможны ли вложенные коллекции ContentItems? - PullRequest
3 голосов
/ 11 января 2011

Может ли произвольное число ContentItems того же класса быть добавлено на страницу в N2? И могут ли они быть вложенными?

т.е. Есть ли способ определить коллекцию ContentItems как свойство в N2? Я также хотел бы вложить их, если это возможно, чтобы мы могли выполнять более значимые запросы к данным. (Т.е. вместо использования огромного EditableTextRegions, который будет трудно запросить.)

В настоящее время у меня есть следующая модель в качестве «идеальной», это может быть N2ified? (Я упустил атрибуты и методы получения / установки стиля N2 для ясности)

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 Ответ

4 голосов
/ 12 января 2011

Да - вместо Get / SetDetail в ваших свойствах используйте Get / SetDetailCollection.

К вашему сведению, если вы используете 2.1, вы можете просто сделать ваши свойства virtual и не включать Get / SetDetail - хотя и не уверены, что это работает для методов DetailCollection, но вы можете смешать их.

Я бы был осторожен с тем, что вы предлагаете - вложение таких коллекций может привести к возникновению проблем SELECT N + 1 . Если вы не можете изменить дизайн, я бы порекомендовал включить кэширование базы данных N2 (которое является всего лишь кэшем 2-го уровня NHibernate), таким образом, насколько это возможно, он будет храниться в памяти без чрезмерного попадания в базу данных.

...