개체 컨텍스트 수명 주기 관리(EntityDataSource)
업데이트: 2007년 11월
EntityDataSource 컨트롤을 사용할 경우 ContextCreating 이벤트에서 고유의 ObjectContext 인스턴스를 제공할 수 있습니다. 이 컨트롤은 새 인스턴스를 만드는 대신 이 ObjectContext 인스턴스를 사용합니다. EntityDataSourceContextDisposingEventArgs 이벤트에서 EntityDataSource 컨트롤이 ObjectContext를 삭제하지 않도록 처리할 수도 있습니다. 이는 페이지에서 두 개 이상의 컨트롤이 사용할 ObjectContext 인스턴스를 하나만 유지하려는 경우에 유용합니다.
ObjectContext 액세스
EntityDataSourceContextCreatingEventArgs 개체에는 ContextCreating 이벤트 처리기의 기존 ObjectContext에 할당할 수 있는 Context 속성이 있습니다.
다음 패턴에서는 하나의 ObjectContext를 두 개 이상의 EntityDataSource 컨트롤 인스턴스에 사용하는 방법을 보여 줍니다.
페이지의 Load 이벤트에서 ObjectContext를 인스턴스화한 다음 이를 클래스 멤버 변수에 할당합니다.
EntityDataSourceContextCreatingEventArgs 이벤트를 처리하고 ObjectContext 멤버를 EntityDataSourceContextCreatingEventArgs 개체의 Context 속성에 할당합니다.
ContextDisposing 이벤트를 처리하고 EntityDataSourceContextDisposingEventArgs의 Cancel() 속성을 true로 설정합니다. 이렇게 하면 ObjectContext가 삭제되지 않습니다.
페이지의 각 EntityDataSource 컨트롤에 대해 2단계와 3단계를 반복합니다.
ObjectContext를 삭제하려면 Dispose 메서드를 호출합니다. 페이지가 언로드될 때에도 컨텍스트가 삭제됩니다.
실행 시간이 긴 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;
}