2011-01-11 2 views
3

Un nombre arbitraire de ContentItems de la même classe peut-il être ajouté à une page dans N2? Et peuvent-ils être imbriqués?N2 CMS: Des collections imbriquées de ContentItems sont-elles possibles?

à savoir Existe-t-il un moyen de définir une collection de ContentItems en tant que propriété dans N2? Je voudrais également les imbriquer si possible afin que nous puissions exécuter des requêtes plus significatives contre les données. (C'est-à-dire au lieu d'utiliser l'énorme EditableTextRegions qui sera difficile à interroger.)

J'ai actuellement le modèle suivant comme 'idéal', cela peut-il être N2ified? (Je l'ai laissé hors attributs et getters de style N2/setters pour plus de clarté)

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 
} 

Répondre

4

Oui - au lieu de Get/SetDetail dans vos propriétés utilisez Get/SetDetailCollection.

Pour votre information, si vous utilisez 2.1, vous pouvez simplement faire vos propriétés virtual et laisser tomber le Get/SetDetail - pas sûr si cela fonctionne pour les méthodes de DetailCollection bien, mais vous pouvez mélanger les deux.

Je serais prudent avec ce que vous proposez bien que - imbriquer des collections comme ceci est susceptible de vous causer des problèmes SELECT N+1 sur toute la ligne. Si vous ne pouvez pas modifier la conception, je vous recommande d'activer la mise en cache de la base de données N2 (qui n'est que le cache de 2ème niveau de NHibernate), autant que possible sera gardée en mémoire sans trop toucher la base de données.

+0

Merci pour la réponse, je l'ai fonctionné maintenant d'une manière différente en faisant une boucle dans la collection des enfants, et en moulant les membres au type approprié. Aussi nous sommes bloqués sur la version 2.0 pour le moment :(Je posterai bientôt du code pour illustrer ... –

Questions connexes