Управление жизненным циклом контекста объекта (EntityDataSource)

Visual Studio 2010

Обновлен: Ноябрь 2007

При использовании элемента управления EntityDataSource можно также передать собственный экземпляр ObjectContext в событии ContextCreating. Элемент управления использует переданный экземпляр ObjectContext, вместо того чтобы создавать новый. Кроме того, можно предотвратить удаление ObjectContext в событии EntityDataSourceContextDisposingEventArgs элементом управления EntityDataSource. Такая возможность полезна, если один экземпляр ObjectContext на странице должен использоваться несколькими элементами управления.

У объекта EntityDataSourceContextCreatingEventArgs есть свойство Context, в качестве значения которого можно назначить существующий объект ObjectContext (присвоение выполняется в обработчике события ContextCreating).

В следующем шаблоне описано, как использовать ObjectContext с несколькими экземплярами элемента управления EntityDataSource.

  1. Создайте экземпляр ObjectContext в событии страницы Load и присвойте созданный экземпляр переменной-члену класса.

  2. Обработайте событие EntityDataSourceContextCreatingEventArgs и присвойте значение члена ObjectContext свойству Context объекта EntityDataSourceContextCreatingEventArgs.

  3. Обработайте событие ContextDisposing и присвойте свойству Cancel() объекта EntityDataSourceContextDisposingEventArgs значение true. Это предотвратит удаление объекта ObjectContext.

  4. Повторите шаги 2 и 3 для каждого элемента управления EntityDataSource на странице.

  5. Вызовите метод Dispose, чтобы удалить ObjectContext. Контекст также удаляется при выгрузке страницы.

Дополнительные сведения об управлении объектом ObjectContext, использующимся в течение длительного времени, см. раздел Управление ресурсами в службах объектов (Entity Framework).

В следующем примере кода показано, как создать переменную ObjectContext для объекта Page и присвоить ее свойству Context объекта 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;
        }
    }

Чтобы сохранить этот член objCtx для использования в будущем, отмените событие ContextCreated, как показано в следующем примере кода.

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

Показ: