10

Sto lavorando con un grande set di dati gerarchici in sql server - modellato usando il tipo di approccio standard "EntityID, ParentID". Ci sono circa 25.000 nodi nell'intero albero.Come utilizzare il framework di entità con i dati gerarchici?

ho spesso bisogno di accedere sottostrutture dell'albero, e quindi i dati di accesso correlato che appende fuori i nodi della sottostruttura. Alcuni anni fa ho creato un livello di accesso ai dati basato su funzioni con valori di tabella, utilizzando query ricorsive per recuperare una sottostruttura arbitraria, dato il nodo radice della sottostruttura.

Sto pensando di utilizzare Entity Framework, ma non riesco a vedere come interrogare i dati gerarchici come questo. AFAIK non ci sono interrogazioni ricorsive in Linq e non posso esporre un TVF nel mio modello dati di entità.

è l'unica soluzione per continuare a utilizzare stored procedure? Qualcun altro ha risolto questo?

Chiarimento: per 25.000 nodi nella struttura mi riferisco alla dimensione del set di dati gerarchico, non a qualsiasi cosa abbia a che fare con oggetti o Entity Framework.

risposta

6

Può il migliore per utilizzare un modello chiamato "nidificate Set", che consente di ottenere una sottostruttura arbitrario all'interno di una query. Ciò è particolarmente utile se i nodi non vengono manipolati molto spesso: Managing hierarchical data in MySQL.

In un mondo perfetto il quadro dell'entità fornirebbe possibilità di salvare e interrogare i dati che utilizzano questo modello di dati.

+0

Il link purtroppo è morto ora – Oskar

+0

@Oskar: la pagina è ora disponibile sul sito dell'autore, ho aggiornato il collegamento. –

0

Tutto è possibile con Entity Framework, ma si deve Hack and slash il vostro senso ad esso. Il database su cui sto lavorando attualmente ha troppe "tabelle titolare" poiché Points, ad esempio, è condiviso con team e utenti. Sia gli utenti che i team possono anche avere un blog.

Quando si dice 25 000 nodi vuoi dire le proprietà di navigazione? Se è così, penso che potrebbe essere difficile ottenere l'accesso ai dati sul posto. Non è difficile navigare, cercare ecc. Con il framework di entità, ma tendo a modellare su carta quindi creare il database in base a come voglio navigare mentre utilizzo il framework di entità. Sembra che tu non abbia questa opzione.

+0

Grazie. Nel mio scenario, la gerarchia (albero) è modellata con una sola tabella, in cui ogni riga contiene dati sul nodo e sul suo ID nodo genitore. – jamesfm

0

Grazie per questi suggerimenti.

Sto iniziando a rendermi conto che la risposta è quella di rimodellare i dati nel database - o sulla falsariga di serie annidate come suggerisce Georg, o forse una tabella di chiusura transitiva, che ho appena visto.

In questo modo, spero di ottenere due vantaggi principali:

a) interrogazione veloce aginst sottostrutture arbitrarie

b) un modello di dati che non richiede più l'esecuzione di query ricorsive - quindi forse portandolo a breve portata del Entity Framework!

E 'sempre sorprendente come spesso la risposta giusta a un problema difficile è di non rispondere, ma per fare qualcosa di diverso, invece!