Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework

di Stefano Mostarda, in .NET Framework, LINQ,

Nello script #648 abbiamo visto come configurare EF per supportare il tipo HierarchyId di Sql Server e come inserire dati in una tabella che ha colonne di questo tipo. In questo script andiamo avanti con la nostra scoperta di questa funzionalità e vediamo come eseguire una query molto semplice: recuperare i padre di un record. Nello script sopra citato abbiamo creato una albero genealogico e quindi adesso proviamo a recuperare i padre di una persona con la seguente query.

var ancestor = ctx.Halflings
  .SingleOrDefault(ancestor => 
    ancestor.PathFromPatriarch == ctx.Halflings.Single(descendent => descendent.Name == "Otho").PathFromPatriarch
  .GetAncestor(1));


La query non è semplicissima da comprendere, quindi la andiamo ad analizzare passo per passo. Partiamo dalla query innestata in SingleOrDefault. In questa query viene recuperata la gerarchia della persona di nome Otho. La gerarchia è la proprietà di tipo HierarchyId e quindi usiamo il suo metodo GetAncestor per recuperare gli avi. Passando 1 come valore al metodo, recuperiamo la gerarchia del padre; se avessimo passato 2, avremmo ottenuto la gerarchia del nonno e così via. A questo punto la query diventa più semplice da capire perchè va a cerecare nella gerarchia il primo record che abbia la gerarchia del padre di Otho.

Come si intuisce anche dalla spiegazione, scrivere query che coinvolgono gli HierarchyId non è banale, ma se usassimo l'approccio di avere per ogni record solo l'id del record padre, sarebbero molto più complesse. Nei prossimi script vedremo altri tipi di query che è possibile realizzare con lo HierarchyId.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi