martedì 20 maggio 2025

C# Entity Framework la gestione di un valore Json in un campo di Sql Server

 



Descrizione

In questo articolo, vedremo come gestire un dato di tipo “Json” in un database Sql Server , utilizzando il linguaggio di programmazione C# ed il Framework Entity Framework Core 9.

L’articolo vuole illustrare la tecnica di salvataggio di un dato, di tipo Json e la relativa lettura, il tutto tramite un progetto di tipo Windows Application in 


Stesura del codice

Supponiamo di avere due tabelle, una denominata Anagrafica e l’altra Prodotti, in cui nella tabella Prodotti, vorremmo mettere il valore json dell’entità Anagrafica nel campo “Note”.

Di seguito si riporta l’istruzione Insert per l’inserimento del dato, dove nel campo “Note”, verrà inserito un valore di tipo Json relativo all’entità Anagrafica.


C#

Anagrafica anagrafica = new Anagrafica();

 anagrafica.Nome = "Luigi";

 anagrafica.Cognome = "Cristaldi";

 

 Prodotti prod = new Prodotti () {

     Descrizione = "Sistemista",

     Note = JsonSerializer.Serialize(new Anagrafica() { Nome = anagrafica.Nome, Cognome = anagrafica.Cognome })

 

 };

 

 DatiContext dati = new DatiContext();

 dati.Anagraficas.Add(anagrafica);

 dati.Prodottiis.Add(prod);

 dati.SaveChanges();

Il dato sarà inserito in un campo di tipo varchar ma nella formattazione Json.
Per eseguire una query “SQL”, apriamo il Management Studio di Microsoft Sql Server, ed eseguiamo la seguente query


SELECT TOP (1000)   [Descrizione], [Note]

FROM [Dati].[dbo].[ Prodotti]

WHERE ISJSON(COALESCE([Note], '{}')) = 1

AND JSON_VALUE(COALESCE([Note], '{}'), '$.Nome') = 'luigi';

Oppure questa


SELECT TOP (1000)   [Descrizione], [Note]

FROM [Dati].[dbo].[Prodotti]

WHERE ISJSON([Note]) = 1

AND JSON_VALUE([Note], '$.Nome') = 'luigi'

AND [Note] IS NOT NULL

AND [Note] <> '';


Il risultato sarà come riportato in figura 1



Figura 1 – Il risultato della query



Tramite la funzione “Json_value” possiamo eseguire le query di tipo Json, mentre con il parametro    “ISJon” verifica la correttezza del campo nella lettura della tabella, se è di tipo Json oppure no.
Gli altri parametri servono da escludere nella ricerca quei campi che non hanno un valore.
Nel caso che si vuole eseguire una query tramite Entity Framework,  per estrapolare il valore del dato salvato come Json, tramite il metodo “contains” possiamo rilevare il valore.

Si riporta il frammento di codice che estrapola i record che hanno per nome il valore “Luigi”.

C#

DatiContext dati = new DatiContext();

 var jsonProdotti = dati.Prodotti

     .Where(p => p.Note.Contains("\"nome\":\"Luigi\"")).ToList();




Conclusioni
L’articolo ha voluto fornire una breve introduzione nella gestione dei dati di tipo Json, nei campi di un database Sql Server, eseguendo le varie query tramite l’ultima versione Entity Framework Core 9.
Un modo per gestire i dati in un formato sempre più utilizzato e che trova ampio utilizzo in vari ambiti.

Nessun commento: