Gestione del ciclo di vita del contesto degli oggetti (EntityDataSource)
Aggiornamento: novembre 2007
Quando si utilizza il controllo EntityDataSource, è possibile fornire un'istanza di ObjectContext personalizzata nell'evento ContextCreating. Il controllo utilizza questa istanza di ObjectContext anziché crearne una nuova. È anche possibile impedire che il controllo EntityDataSource elimini l'oggetto ObjectContext nell'evento EntityDataSourceContextDisposingEventArgs.Questa possibilità si rivela utile quando si desidera gestire una singola istanza di ObjectContext nella pagina che verrà utilizzata da più controlli.
Accesso a ObjectContext
L'oggetto EntityDataSourceContextCreatingEventArgs dispone di una proprietà Context che può essere assegnata a un oggetto ObjectContext esistente nel gestore dell'evento ContextCreating.
Nel seguente modello viene descritto come utilizzare un oggetto ObjectContext con più istanze del controllo EntityDataSource:
Creare un'istanza di ObjectContext nell'evento Load della pagina e assegnarla a una variabile membro della classe.
Gestire l'evento EntityDataSourceContextCreatingEventArgs e assegnare il membro ObjectContext alla proprietà Context dell'oggetto EntityDataSourceContextCreatingEventArgs.
Gestire l'evento ContextDisposing e impostare la proprietà Cancel() dell'oggetto EntityDataSourceContextDisposingEventArgs su true. In tal modo viene impedita l'eliminazione di ObjectContext.
Ripetere i passaggi 2 e 3 per ogni controllo EntityDataSource nella pagina.
Chiamare il metodo Dispose per eliminare ObjectContext. Quando la pagina viene scaricata, viene eliminato anche il contesto.
Per ulteriori informazioni sulla gestione di un oggetto ObjectContext a esecuzione prolungata, vedere Gestione di risorse in Object Services (Entity Framework).
Nel codice riportato di seguito viene illustrato come creare una variabile ObjectContext per l'oggetto Page e assegnarla alla proprietà Context dell'oggetto EntityDataSourceContextCreatingEventArgs.
public partial class _Default : System.Web.UI.Page
{
AdventureWorksModel.AdventureWorksEntities objCtx =
new AdventureWorksModel.AdventureWorksEntities();
protected void EntityDataSource2_ContextCreating(object sender,
EntityDataSourceContextCreatingEventArgs e)
{
e.Context = objCtx;
}
}
Per conservare il membro objCtx per un riferimento futuro, annullare l'evento ContextCreated come illustrato nel codice riportato di seguito.
protected void EntityDataSource2_ContextDisposing(object sender,
EntityDataSourceContextDisposingEventArgs e)
{
e.Cancel = true;
}
Vedere anche
Concetti
Esempio della Guida rapida relativo a EntityDataSource