对象上下文生命周期管理 (EntityDataSource)
更新:2007 年 11 月
在使用 EntityDataSource 控件时,可以在 ContextCreating 事件中提供自己的 ObjectContext 实例。此控件使用该 ObjectContext 实例,而不是创建新实例。您还可以防止 EntityDataSource 控件在 EntityDataSourceContextDisposingEventArgs 事件中释放 ObjectContext。如果您希望在将要由多个控件使用的页面中维护单个 ObjectContext 实例,则这会非常有用。
访问 ObjectContext
EntityDataSourceContextCreatingEventArgs 对象具有 Context 属性,可以将该属性赋给 ContextCreating 事件处理程序中现有的 ObjectContext。
下面的模式介绍如何将 ObjectContext 与 EntityDataSource 控件的多个实例一起使用:
在页面的 Load 事件中实例化 ObjectContext,并将其赋给类成员变量。
处理 EntityDataSourceContextCreatingEventArgs 事件,并将 ObjectContext 成员赋给 EntityDataSourceContextCreatingEventArgs 对象的 Context 属性。
处理 ContextDisposing 事件,并将 EntityDataSourceContextDisposingEventArgs 的 Cancel() 属性设置为 true。这可以防止释放 ObjectContext。
对于页面中的每个 EntityDataSource 控件,重复步骤 2 和 3。
调用 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;
}