Utilizzare ExecuteUpdate per aggiornare colonne JSON in Entity Framework

di Stefano Mostarda, in LINQ, Entity Framework,

Sin dall'introduzione del supporto a JSON, Entity Framework ha permesso di aggiornare i valori delle colonne che contengono oggetti JSON sfruttando SaveChanges(Async). Tuttavia, una cosa che non è stata supportata fino alla versione 9 è la possibilità di modificare il valore di una colonna JSON tramite il metodo ExecuteUpdate(Async).

A partire dalla versione 10, Entity Framework colma questo gap permettendoci di effettuare quindi aggiornamenti in bulk anche di colonne JSON tramite il seguente codice.

public class Person
{
    public int Id { get; set; }

    public PrimaryAddress Address { get; set; }
}

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
}

public class MyContext : DbContext 
{
  public DbSet<Person> People { get; set; }

  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
      modelBuilder.Entity<Person>().ComplexProperty(b => b.PrimaryAddress, bd => bd.ToJson());
  }
}

public async Task Update()
{
  await context.People.ExecuteUpdateAsync(s =>
    s.SetProperty(b => b.PrimaryAddress.Street, b => b.PrimaryAddress.Street + "New"));
}

Il codice del metodo Update genera ed esegue il seguente SQL.

UPDATE [p]
SET PrimaryAddress.modify('$.Street', JSON_VALUE(<strong>.[PrimaryAddress], '$.Street' + 'New')
FROM People AS [p]

Commenti

Visualizza/aggiungi commenti

| Condividi su: LinkedIn, Facebook

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