2012-10-24 3 views
2

ObjectDataSource를하고 CacheKeyDependency는 두 번 를 호출된다 !!! 나는 CacheKeyDependencyObjectDataSource 선택 이벤트가 발생 제거하면 제대로 한 번만,내가 선언적 .ASPX 구문의 <code>CacheKeyDependency</code>의 <code>ObjectDataSource.Selecting</code> 이벤트를 설정 (및 선정) 때 <code>ObjectDataSource</code>이 <strong>CacheKeyDependency</strong></p> <p>를 사용 가진 매우 이상한 행동을 발견 한 버그에

을 (물론 또한 관련 데이터베이스 SelectMethod 두 번 호출되는) 그러나!

속도이 잠재적으로 내 코드를 숨김 깰 수있는 로직 나는/한 번만 호출되는 선택한 것이 선택한다고 가정하면 ...

당신의 어떤 것을 발견했습니다 떨어져 관련된?

이 동작은 ASP.NET의 버그 또는 내 코드에 버그가있을 수 있습니다.

PS : 이벤트의 타임 라인은 굵은 중복 된 것들에로, 그래서 같다 :

PageLoad 

ODS_Selecting 

DataLayer Select 

ODS_Selected 

ODS_Filtering 

GridView_DataBound 

**ODS_Selecting** 

**DataLayer Select** 

**ODS_Selected** 

ODS_Filtering 

GridView_DataBound 

GridView_PreRender 

답변

1

CacheKeyDependencyCache 값을 설정해야합니다. 그렇지 않으면 ObjectDataSource 캐시가 본질적으로 사용할 수 없으므로 select 메서드가 두 번 호출 될 수 있습니다.

Microsoft documentation의 예를 참조하십시오.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     Cache[ObjectDataSource2.CacheKeyDependency] = "CacheExample"; 
    } 
} 

최상의 방법은 다음과 같습니다. MS 예제는 페이지로드가 포스트 백이 아닐 때 캐시를 만료시킵니다.

if (null == Cache[ObjectDataSource2.CacheKeyDependency]) 
{ 
    Cache[ObjectDataSource2.CacheKeyDependency] = new Object(); 
}