33 messaggi dal 10 maggio 2015
Ciao a tutti. Siccome a breve mi capitera' di dover progettare una web application basata su Web Forms ed Entity Framework, mi sono venuti alcuni dubbi circa il ciclo di vita del DbContext.

Giusto per fare un esempio pratico: supponiamo di avere una pagina con una gridView che espone una lista di prodotti; l'utente, attraverso un tasto "Modifica" presente sulla gridView, seleziona un prodotto da modificare.

Si configura quindi un codice piu' o meno come il seguente:

// Pressione del tasto "Salva Modifiche"
using(EntitiesContext ctx = new EntitiesContext())
{
var product = ctx.Products.Find(id);
product.name = "new name";
ctx.SaveChanges();
}

RefreshGridView();

Supponendo poi di dover refreshare, attraverso il metodo (per non replicare tutte le volte lo stesso codice di fetching) RefreshGridView, la gridView per mostrare all'utente le modifiche appena effettuate, e' consigliabile istanziare un nuovo contesto per il fetching all'interno del metodo

void RefreshGridView()
{
using(EntitiesContext ctx = new EntitiesContext())
{
var products = ctx.Products.ToList();
grid.DataSource = products;
grid.DataBind();
}
}

Oppure, per non ricreare ogni volta l'oggetto, conviene creare un contesto unico che sopravviva per tutta la sessione? Immagino che dipenda dal tipo di applicazione, e anche dal numero di PostBack coinvolti, giusto?

Ho iniziato da poco con Entity Framework e sto cercando di comprendere i vari meccanismi che lo regolano, oltre ai modi migliori per non appesantire le prestazioni.

Ringrazio anticipatamente per le risposte.

Grazie mille e buona giornata.
Modificato da LinQT il 19 agosto 2015 14.11 -
Modificato da LinQT il 19 agosto 2015 15.02 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

LinQT ha scritto:

Immagino che dipenda dal tipo di applicazione, e anche dal numero di PostBack coinvolti, giusto?

Per un'applicazione web, il DbContext dovrebbe durare tanto quando una singola richiesta, cioè lo crei all'inizio della richiesta e lo distruggi alla fine.
Leggi questo articolo di Daniele (che si riferisce all'ObjectContext ma è la stessa cosa).
http://www.aspitalia.com/script/1037/Gestire-Ciclo-Vita-Object-Context-Entity-Framework-Applicazione-ASP.NET.aspx

Far durare il DbContext per tutta la sessione è troppo, perché resterà residente in memoria per 20 minuti dopo l'ultima interazione dell'utente. Inoltre, con l'uso, si riempirebbe di oggetti che magari non sono rilevanti in tutte le pagine.

ciao,
Moreno

Enjoy learning and just keep making
33 messaggi dal 10 maggio 2015
Ciao,
ti ringrazio per le delucidazioni e per il link all'articolo.

Buona giornata e buon lavoro.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.