Le novità di Entity Framework 6.0

di , in LINQ,

In contemporanea con l’uscita del .NET Framework 4.5.1, Microsoft ha rilasciato una nuova versione di Entity Framework: la versione 6.0. Questa versione introduce moltissime novità, ma le più importanti non riguardano il punto di vista tecnico bensì quello dello sviluppo e delle modalità di distribuzione. La prima novità è che, a partire da questa versione, Entity Framework è Open Source.

Utilizzare un programma Open Source può spaventare perchè, spesso, dal concetto di Open Source si percepisce una scarsa qualità del codice e del prodotto. In questo caso non è affatto così in quanto il team di ADO.NET è il solo e unico proprietario del codice di Entity Framework ed è il solo che può autorizzare uno sviluppatore esterno a contribuire al codice di Entity Framework. Per garantire qualità e affidabilità, lo sviluppatore esterno deve proporre una funzionalità che il team di ADO.NET deve approvare. In seguito all'approvazione, lo sviluppatore esterno deve sviluppare la funzionalità seguendo le linee guida (molto dettagliate) e dimostrare attraverso una batteria di test che la funzionalità rispetta i criteri di robustezza, funzionalità e prestazionalità di Entity Framework. Questo garantisce quindi la qualità del codice di Entity Framework anche se questo è Open Source.

Non solo. Quando viene rilasciata una nuova versione di Entity Framework, l'assembly viene segnato con la chiave privata di Microsoft e Microsoft fornisce il supporto pieno (anche attraverso i canali a pagamento). L'affidabilità del codice e il supporto da parte di Microsoft garantiscono la qualità del prodotto e quindi non si deve temere in alcun modo per il passaggio all'Open Source.

L'altra grossa novità di Entity Framework riguarda la distribuzione: Entity Framework è stato completamente portato fuori dal .NET Framework. Questo significa che adesso i tempi di rilascio di Entity Framework non sono più collegati al .NET Framework e quindi possiamo avere rilasci molto più frequenti.

Queste mosse sono le stesse che ha fatto il team di ASP.NET con ASP.NET MVC e, visto il loro successo, il team di ADO.NET ha deciso di emularle.

Ora che abbiamo visto le principali novità che esulano il piano tecnico, cominciamo col vedere le novità che più ci interessano da vicino quando utilizziamo Entity Framework 6.0. Queste novità sono elencate di seguito:

  • Supporto per il pattern async/await
  • Connection resiliency per SQL Azure
  • Sistema di logging
  • Miglioramenti alla gestione di connessioni e transazioni
  • Convenzioni custom in Code First
  • Mapping delle stored procedure di scrittura in Code First

Vediamo ora le novità una ad una.

Supporto per il pattern async/await

Tra le poche novità del .NET Framework 4.5.1 ci sono le nuove API di ADO.NET per il supporto dei Task e del pattern async/await. Visto che Entity Framework si basa su ADO.NET, in Entity Framerwork 6.0 è stato introdotto il suppporto per i Task e quindi il pattern async/await. Nel prossimo script possiamo vedere un esempio di utilizzo.

public async Task<ActionResult> Async()
{
  using (var ctx = new NorthwindEntities())
  {
    var customer = await ctx.Customers.FirstAsync();
    customer.Phone = "056-875-7" + DateTime.Now.Second;
    await ctx.SaveChangesAsync();
  }
  return View();
}

Il codice appena visto mostra una action asincrona di un controller MVC. Nella action istanziamo il contesto, e successivamente usiamo il metodo FirstAsync per recuperare il primo cliente. Successivamente modifichiamo il campo Phone e infine usiamo SaveChangesAsync per scrivere la modifica al database. Come si può intuire da questo snippet, i metodi di accesso al database sono stati duplicati per fornire sia una versione sincrona che una asincrona. Questo significa che abbiamo a disposizione metodi come ToListAsync, WhereAsync, SelectAsync, FindAsync, MaxAsync e così via.

Grazie a questi nuovi metodi, l'utilizzo del pattern async/await con Entity Framework è molto semplice. Va detto che utilizzare il pattern async/await non migliora le prestazioni della singola chiamata alla action, anzi, le peggiora in quanto viene introdotto un overhead dovuto alla gestione del Task. Tuttavia, l'utilizzo del pattern async/await migliora l'utilizzo dei thread da parte delle applicazioni e quindi pur rallentando leggermente l'esecuzione, garantisce un maggior numero di esecuzioni rispetto all'utilizzo di API sincrone.

Connection resiliency

Entity Framework 6.0 supporta la connection resiliency ovvero la capacità di ripristinare una connessione interrotta per problemi temporanei (ad esempio per l'assenza di rete). Un caso in cui questa feature torna utile è quando utilizziamo SQL Azure. Abilitare la connection resiliency per Azure è molto semplice in quanto ci basta impostarla nella classe di configurazione di Entity Framework. Vediamo il codice nel prossimo snippet così che possiamo discuterlo successivamente.

public class NorthwindConfiguration : DbConfiguration
{
  public NorthwindConfiguration()
  {
    this.SetExecutionStrategy("System.Data.SqlClient",
      () => new SqlAzureExecutionStrategy(5, TimeSpan.FromMilliseconds(5000)) );
  }
}

La prima cosa da notare è la classe NorthwindConfiguration. Se facciamo ereditare questa classe da DbConfiguration e la inseriamo nello stesso assembly in cui si trova il contesto, Entity Framework ne invoca automaticamente il costruttore la prima volta che istanziamo un contesto. All'interno del costruttore invochiamo il metodo SetExecutionStrategy specificando che per il provider di Sql Server deve usare la strategy SqlAzureStrategy. Questa strategy specifica che quando ci sono problemi di connessione, Entity Framework deve riprovare a connettersi al database per cinque volte ogni cinque secondi.

3 pagine in totale: 1 2 3
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

Le novità di Entity Framework 6.0 1010 5
| Condividi su: Twitter, Facebook, LinkedIn, Google+

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti