Costruire e rendere infinito albero di categoria gerarchica dalla tabella delle categorie di auto-referenziale
-
26-09-2019 - |
Domanda
Ho una tabella Categories
in cui ogni categoria ha un ParentId
che può riferirsi a CategoryId
di qualsiasi altra categoria che voglio display come lista HTML multi-livello, in questo modo:
<ul class="tree">
<li>Parent Category
<ul>
<li>1st Child Category
<!-- more sub-categories -->
</li>
<li>2nd Child Category
<!-- more sub-categories -->
</li>
</ul>
</li>
</ul>
Al momento sto ricorsivamente il rendering di una vista parziale e tramandare la categoria successiva. E le grandi opere, ma è sbagliato perché sono l'esecuzione di query in una visualizzazione.
Come posso rendere la lista in un oggetto albero e la cache per la visualizzazione rapida ogni volta che ho bisogno di un elenco di tutte le categorie gerarchiche?
Soluzione
Crea una classe di visualizzazione modello che è autoreferenziale.
popolano nella classe modello appropriato (o forse nel vostro DataContext
classe parziale) utilizzando la query si sta eseguendo nella vista.
Avvolgere il metodo che fa la query in un metodo che controlli e memorizza il risultato in Cache
.
Assicurati di invalidare la cache ogni volta che vengono apportate modifiche alla struttura di categoria.
Se la query esegue un sacco di domande (uno per livello di albero), quindi prendere in considerazione ottenere il contenuto della tabella delle categorie, come una semplice lista e quindi utilizzando LINQ to Objects proiettare nella tua classe di visualizzazione del modello.