2009-09-15 4 views
2

데이터베이스를 호출하는 대신 linq-to-sql 캐시에서 객체를 가져 오는 GetItemFromCacheById 함수를 어떻게 구현할 수 있습니까?db를 호출하지 않고 ID로 캐시 된 Entity 가져 오기

using (var cxt = new DbDataContext()) 
{ 
    // Read item into the cache 
    Item item = cxt.Items.Where(x => x.Id == 1).Single(); 

    //... 

    item = GetItemFromCacheById(cxt, 1); 
} 

답변

1

게시 된 것처럼 작동하지 않는 이유는 linq to sql의 작은 버그 때문입니다. 다음과 같이 Single 메서드 자체 내에 필터하기 위해 람다 표현식을 배치해야합니다.

Item item = cxt.Items.Single (x => x.Id == 1);

이 사이트에 따르면 버그는 .net 4.0 http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40에서 수정 될 것입니다.

1

LINQ to SQL의 내부 캐시에 의존해서는 안됩니다. LINQ to SQL은 데이터베이스에서 개체를 가져 와서 변경 내용을 다시 데이터베이스에 제출하도록 설계되었습니다. 내부적으로 특정 캐시 동작을 가지고 있지만 중간 계층 캐싱 구성 요소가되도록 의도되지 않았습니다. (reference)

왜이 경우 캐시 된 엔터티가 필요합니까? 엔티티의 변경되지 않은 버전이 필요합니까? 실적에 관심이 있습니까?

+0

사실 저는 이것을 실제로 적용 할 수 있을지 모르겠습니다. 그냥 자세를 더 잘 이해하려고 노력합니다. – alex2k8

관련 문제