博客园  :: 首页  :: 联系 :: 管理

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

Posted on 2009-11-30 15:22  sunrack  阅读(1913)  评论(0)    收藏  举报

在使用 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;
   }