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
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Gestire progetti .NET + React in .NET Aspire
Change tracking e composition in Entity Framework
.NET Conference Italia 2024
Integrare un servizio esterno con .NET Aspire
Ottenere un token di accesso per una GitHub App
Configurare e gestire sidecar container in Azure App Service
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Recuperare App Service cancellati su Azure
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Creare una libreria CSS universale: Immagini
Aggiornare a .NET 9 su Azure App Service