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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Combinare Container Queries e Media Queries
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Managed deployment strategy in Azure DevOps
Gestione dei nomi con le regole @layer in CSS
Creare una libreria CSS universale - Rotazione degli elementi
Configurare e gestire sidecar container in Azure App Service
Supportare la sessione affinity di Azure App Service con Application Gateway
Utilizzare DeepSeek R1 con Azure AI
Utilizzare gRPC su App Service di Azure
Creare una libreria CSS universale: Immagini
Gestire i dati con Azure Cosmos DB Data Explorer
Testare l'invio dei messaggi con Event Hubs Data Explorer