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
Introduzione a GitHub Copilot CLI
Arricchire l'interfaccia di .NET Aspire
Gestione delle scrollbar dinamiche in HTML e CSS
Esporre un server MCP esistente con Azure API Management
Gestire pubblicazione Kubernetes tramite .NET Aspire
Importare repository da Bitbucket a GitHub Enterprise Cloud
Gestire gli errori nelle Promise JavaScript con try()
Migrare applicazioni legacy nel cloud con Azure App Service Managed Instance
Gestire trasferimenti cloud con Azure Storage Mover
Escludere alcuni file da GitHub Copilot
Loggare le query più lente con Entity Framework
Centralizzare gli endpoint AI Foundry con Azure API Management


