Управление жизненным циклом контекста объекта (EntityDataSource)
Обновлен: Ноябрь 2007
При использовании элемента управления EntityDataSource можно также передать собственный экземпляр ObjectContext в событии ContextCreating. Элемент управления использует переданный экземпляр ObjectContext, вместо того чтобы создавать новый. Кроме того, можно предотвратить удаление ObjectContext в событии EntityDataSourceContextDisposingEventArgs элементом управления EntityDataSource.Такая возможность полезна, если один экземпляр ObjectContext на странице должен использоваться несколькими элементами управления.
Доступ к объекту ObjectContext
У объекта EntityDataSourceContextCreatingEventArgs есть свойство Context, в качестве значения которого можно назначить существующий объект ObjectContext (присвоение выполняется в обработчике события ContextCreating).
В следующем шаблоне описано, как использовать ObjectContext с несколькими экземплярами элемента управления EntityDataSource.
Создайте экземпляр ObjectContext в событии страницы Load и присвойте созданный экземпляр переменной-члену класса.
Обработайте событие EntityDataSourceContextCreatingEventArgs и присвойте значение члена ObjectContext свойству Context объекта EntityDataSourceContextCreatingEventArgs.
Обработайте событие ContextDisposing и присвойте свойству Cancel() объекта EntityDataSourceContextDisposingEventArgs значение true. Это предотвратит удаление объекта ObjectContext.
Повторите шаги 2 и 3 для каждого элемента управления EntityDataSource на странице.
Вызовите метод 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;
}
См. также
Основные понятия
Пример использования EntityDataSource