문제

우리는 DAL 작업에서 LINQ to SQL을 사용하기 시작했으며 실제로 아웃 캐싱 모델에 대한 표준을 마련하지 못했습니다.이전에는 모든 DAL 클래스가 상속받은 캐시 관리자 속성을 구현하는 기본 'DAL' 클래스를 사용했지만 지금은 그렇지 않습니다.LINQ to SQL 결과를 캐싱하는 '표준' 접근 방식을 생각해낸 사람이 있는지 궁금합니다.

차이가 있다면 웹 환경(IIS)에서 작업하고 있습니다.나는 이것이 결국 주걱 질문이지만 여전히 정보가 가치 있을 것이라고 생각합니다.

편집하다: 명확히 하자면, 개별 결과를 캐싱하는 것에 대해 말하는 것이 아니라 모든 링크 방법이 동일한 캐싱 아키텍처를 사용하도록 캐싱을 설정하는 방법과 같은 아키텍처 솔루션에 더 중점을 두고 있습니다.

도움이 되었습니까?

해결책

빠른 답변:엔터티를 가져오려면 리포지토리 패턴(Evans의 도메인 기반 설계 참조)을 사용하세요.각 저장소는 보유할 항목을 캐시합니다. 이상적으로는 저장소의 각 인스턴스가 싱글톤 캐시에 액세스하도록 허용합니다(각 스레드/요청은 새 저장소를 인스턴스화하지만 캐시는 하나만 있을 수 있음).

위의 답변은 하나의 컴퓨터에서만 작동합니다.이것을 여러 머신에서 사용하려면 다음을 사용하세요. 멤캐시드 캐싱 솔루션으로 사용하세요.행운을 빌어요!

다른 팁

나의 LINQ 쿼리 결과 캐시 아마도 당신이 찾고있는 것일 것입니다.

var q = from c in context.Customers
        where c.City == "London"
        select new { c.Name, c.Phone };

var result = q.Take(10).FromCache();

피트.

코 바로 아래에 있어요:

List<TableItem> myResult = (from t in db.Table select t).ToList();

이제 이전 DAL의 반환된 데이터를 캐시한 것처럼 myResult를 캐시하면 됩니다.

나는 찾았다 이 게시물, LINQ 개체를 캐싱하는 수단으로 확장 방법을 제공합니다.

저는 이제 Linq2SQL에 대한 좋은 캐싱 솔루션을 찾으려고 노력하는 약한 사람들을 위해 벽에 머리를 부딪혔습니다. 모든 것에 맞는 단일 크기를 찾는 데 정말 어려움을 겪고 있다는 것을 인정해야 합니다...

저장소 패턴은 IQueryable을 다시 구현하지 않고 캐싱을 Linq 문 외부에서 수행해야 하기 때문에 Linq의 유용성을 제한하는 경향이 있습니다.

더욱이, 객체를 캐시하려는 경우 지연 로딩과 객체 추적은 모두 큰 금기 사항이므로 업데이트 수행이 다소 까다로워집니다.

고도의 동시성 웹 프로젝트 내에서 이 문제를 해결한 사람이라면 누구든지 참여하여 세상을 구해주세요!:)

나는 이것이 아마도 약간 늦은 답변이라는 것을 이해합니다 ...그럼에도 불구하고 다음을 시도해 볼 수 있습니다. LinqToCache 프로젝트.가능한 경우 임의의 LINQ 쿼리에 SqlDepdency를 연결하고 서버 측 쿼리 알림을 통해 활성 캐시 무효화를 제공합니다.쿼리는 알림에 대한 유효한 쿼리여야 합니다. 알림 쿼리 생성.대부분의 Linq-to-sql 쿼리는 테이블이 두 부분으로 구성된 이름(dbo.Table, 뿐만 아니라 Table).

'ReferenceData' 클래스의 'GetReferenceData' 메서드를 참조하세요. 이 기사: http://blog.huagati.com/res/index.php/2008/06/23/application-architecture-part-2-data-access-layer-dynamic-linq/

L2S를 사용하여 검색된 데이터를 캐싱하기 위해 asp.net 페이지 캐시를 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top