对象上下文生命周期管理 (EntityDataSource)

更新:2007 年 11 月

在使用 EntityDataSource 控件时,可以在 ContextCreating 事件中提供自己的 ObjectContext 实例。此控件使用该 ObjectContext 实例,而不是创建新实例。您还可以防止 EntityDataSource 控件在 EntityDataSourceContextDisposingEventArgs 事件中释放 ObjectContext。如果您希望在将要由多个控件使用的页面中维护单个 ObjectContext 实例,则这会非常有用。

访问 ObjectContext

EntityDataSourceContextCreatingEventArgs 对象具有 Context 属性,可以将该属性赋给 ContextCreating 事件处理程序中现有的 ObjectContext

下面的模式介绍如何将 ObjectContextEntityDataSource 控件的多个实例一起使用:

  1. 在页面的 Load 事件中实例化 ObjectContext,并将其赋给类成员变量。

  2. 处理 EntityDataSourceContextCreatingEventArgs 事件,并将 ObjectContext 成员赋给 EntityDataSourceContextCreatingEventArgs 对象的 Context 属性。

  3. 处理 ContextDisposing 事件,并将 EntityDataSourceContextDisposingEventArgs 的 Cancel() 属性设置为 true。这可以防止释放 ObjectContext

  4. 对于页面中的每个 EntityDataSource 控件,重复步骤 2 和 3。

  5. 调用 Dispose 方法以释放 ObjectContext。在页面卸载之后,该上下文也会被释放。

有关管理长时间运行的 ObjectContext 的更多信息,请参见在对象服务中管理服务 (Entity Framework)

下面的代码演示如何创建 Page 对象的 ObjectContext 变量,并将其赋给 EntityDataSourceContextCreatingEventArgs 对象的 Context 属性。

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 事件

EntityDataSource 快速入门示例

其他资源

使用 EntityDataSource 选择数据