2010-07-13 5 views
0

특정 데이터베이스에서 모든 레코드를 가져 와서 캐시에 저장하는 메서드가 있습니다. 그 메소드가 호출 될 때, 먼저 캐시를 검사하여 캐시 버전이 만료되지 않았 으면 캐시 버전을 단순히 리턴 할 수 있는지를 확인합니다.SQL에 linq 테이블 crud 작업에 대한 트리거 캐시 지우기

질문 : dataContext.SubmitChanges()가 호출 될 때마다 어떻게 메소드를 트리거합니까? 예를 들어, Book 테이블에서 모든 책을 가져 와서 Cache [ "AllBooks"]에 저장하면 책 테이블과 관련된 모든 중요한 작업에서이 캐시 개체를 지우려고합니다.

내가 현재을하고 있어요 :

var b = dataContext.Books.Where(x => x.BookId == 4).SingleOrDefault(); 
b.Title = "new title for book w/ id of 4"; 
dataContext.SubmitChanges(); 
ClearBookCache(); 

나중에 ...

private void ClearBookCache() { 
    CustomCachingSystem.Clear["AllBooks"]; 
} 

내가 원하는 것은 다음 ClearBookCache() 자동으로 예약 테이블 CRUD에 트리거 할 나는 책 테이블에서 매번 작업을 할 때마다 그것을 부르는 것을 잊지 않아도됩니다.

참고 : Book 테이블과 무관 한 테이블에서 crud 작업을 수행하면 ClearBookCache() 메서드를 호출하지 않아도됩니다.

나는 이것이 의미가 있기를 바랍니다.

+0

모든 CRUD 작업이 필요합니까? CUD와 더 비슷합니다 - 읽지 않은 부분이 없지 않습니까? –

답변

2

SqlDependency Class을 사용할 수 있습니다. 기본적으로 쿼리 된 데이터의 변경 사항을 감지 할 수 있습니다 (M $ SQL Server 2005 이상을 사용하는 경우).

Service Broker 기술을 살펴볼 수 있습니다 (M $ SQL Server 2005 이상을 사용하는 경우).

응용 프로그램에서 직접 감지하는 것만으로는 충분하지 않을 수도 있습니다. 응용 프로그램 외부에서 수행 된 변경 사항을 감지 할 수 없습니다.

0

을 살펴보십시오. DataContext에서 상속 받아 SubmitChanges 메서드를 재정 의하여 ChangeSet 내용을 기반으로 관련 캐시를 지운 다음 MyBase.SubmitChanges (...)를 호출 할 수 있습니다.

+0

그러나 Jaroslav의 의견은 물론 매우 유효합니다. 다른 사용자가 캐시 한 데이터를 수정하는 경우 캐시로 올바른 일을 수행하지 않습니다. –