Domanda

Sto lavorando con un grande set di dati gerarchici nel server sql - modellato usando lo standard "EntityID, ParentID" tipo di approccio. Ci sono circa 25.000 nodi nell'intero albero.

Spesso ho bisogno di accedere a sottostrutture dell'albero e quindi di accedere a dati correlati che pendono dai 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 query ricorsive in Linq e non posso esporre un TVF nel mio modello di dati di entità.

È l'unica soluzione per continuare a utilizzare i proc memorizzati? Qualcun altro ha risolto questo?

Chiarimento: per 25.000 nodi nella struttura mi riferisco alle dimensioni del set di dati gerarchico, non a nulla a che fare con gli oggetti o Entity Framework.

È stato utile?

Soluzione

Potrebbe essere preferibile utilizzare un modello chiamato " Set annidato " ;, che consente di ottenere una sottostruttura arbitraria all'interno di una query. Ciò è particolarmente utile se i nodi non vengono manipolati molto spesso: Gestione dei dati gerarchici in MySQL .

In un mondo perfetto il framework di entità fornirebbe la possibilità di salvare e interrogare i dati usando questo modello di dati.

Altri suggerimenti

Tutto è possibile con Entity Framework ma devi hackerare e tagliare. Il database con cui sto attualmente lavorando ha troppe "tabelle dei titolari" poiché i punti ad esempio sono condivisi con entrambi i team e gli utenti. Sia gli utenti che i team possono anche avere un blog.

Quando dici 25000 nodi intendi le proprietà di navigazione? In tal caso, penso che potrebbe essere difficile ottenere l'accesso ai dati in atto. Non è difficile navigare, cercare ecc. Con il framework delle entità, ma tendo a modellare su carta, quindi a creare il database in base a come voglio navigare mentre utilizzo il framework di entità. Sembra che tu non abbia questa opzione.

Grazie per questi suggerimenti.

Sto cominciando a rendermi conto che la risposta è quella di rimodellare i dati nel database - o sulla falsariga di insiemi nidificati come suggerisce Georg, o forse una tabella di chiusura transitiva, che ho appena incontrato.

In questo modo, spero di ottenere due vantaggi chiave:

a) interrogazioni più veloci tra sottotitoli arbitrari

b) un modello di dati che non richiede più query ricorsive, quindi forse lo rende a portata di mano di Entity Framework!

È sempre sorprendente quante volte la risposta giusta a un problema difficile non sia quella di rispondere, ma invece fare qualcos'altro!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top