Freigeben über


Lebenszyklusverwaltung für Objektkontexte (EntityDataSource)

Aktualisiert: November 2007

Wenn Sie das EntityDataSource-Steuerelement verwenden, können Sie auch eine eigene ObjectContext-Instanz im ContextCreating-Ereignis bereitstellen. Das Steuerelement verwendet diese ObjectContext-Instanz, anstatt eine neue zu erstellen. Sie können auch verhindern, dass das EntityDataSource-Steuerelement den ObjectContext im EntityDataSourceContextDisposingEventArgs-Ereignis freigibt.Dies ist hilfreich, wenn Sie eine einzelne ObjectContext-Instanz auf Ihrer Seite beibehalten möchten, die von mehreren Steuerelementen verwendet werden soll.

Zugreifen auf den ObjectContext

Das EntityDataSourceContextCreatingEventArgs-Objekt verfügt über eine Context-Eigenschaft, die einem vorhandenen ObjectContext im ContextCreating-Ereignishandler zugewiesen werden kann.

Im folgenden Muster wird beschrieben, wie Sie einen ObjectContext mit mehreren Instanzen des EntityDataSource-Steuerelements verwenden:

  1. Instanziieren Sie den ObjectContext im Load-Ereignis der Seite, und weisen Sie ihn einer Klassenmembervariablen zu.

  2. Behandeln Sie das EntityDataSourceContextCreatingEventArgs-Ereignis, und weisen Sie den ObjectContext-Member der Context-Eigenschaft des EntityDataSourceContextCreatingEventArgs-Objekts zu.

  3. Behandeln Sie das ContextDisposing-Ereignis, und legen Sie die Cancel()-Eigenschaft von EntityDataSourceContextDisposingEventArgs auf true fest. Dies verhindert die Weitergabe des ObjectContext.

  4. Wiederholen Sie Schritt 2 und 3 für jedes EntityDataSource-Steuerelement in der Seite.

  5. Rufen Sie die Dispose-Methode auf, um den ObjectContext weiterzugeben. Der Kontext wird auch beim Entladen der Seite freigegeben.

Weitere Informationen über das Verwalten eines ObjectContext mit langer Laufzeit finden Sie unter Verwalten von Ressourcen in Objektdiensten (Entity Framework).

Der folgende Code veranschaulicht, wie eine ObjectContext-Variable für das Page-Objekt erstellt und der Context-Eigenschaft des EntityDataSourceContextCreatingEventArgs-Objekts zugewiesen wird.

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;
        }
    }

Um diesen objCtx-Member zur zukünftigen Referenz beizubehalten, brechen Sie das ContextCreated-Ereignis ab, wie durch den folgenden Code dargestellt.

        protected void EntityDataSource2_ContextDisposing(object sender, 
            EntityDataSourceContextDisposingEventArgs e)
        {
            e.Cancel = true;
        }

Siehe auch

Konzepte

EntityDataSource-Ereignisse

EntityDataSource-Schnellstartbeispiel

Weitere Ressourcen

Datenauswahl mit EntityDataSource