2011-12-16 3 views
1

캐시에 익명 클래스의 < 목록을 넣는 데 문제가 있습니다.Azure appfabric 캐시, Linq에서 SQL에 익명 클래스의 직렬화 문제

var cache = new DataCacheFactory().GetCache("default"); 
var parts = somethingIQueryable.Select(i => new { i.s1, i.s2 }); 
cache.Put("somekey", parts.ToList(), TimeSpan.FromMinutes(2)); 

이 경우 직렬화 예외가 발생합니다. 나는이 같은 클래스의 데이터를 넣을 경우 그것은 작동 :

public class A { public string s1, public string s2 }  

var cache = new DataCacheFactory().GetCache("default"); 
var parts = somethingIQueryable.Select(i => new A { s1 = i.s1, s2 = i.s2 }); 
cache.Put("somekey", parts.ToList(), TimeSpan.FromMinutes(2)); 

나는 것보다는 아니지만 캐시로가는 데이터의 모든 조금을위한 클래스를 정의해야하고,하는 방법이 있는지 궁금 해서요 첫 번째 예제가 효과가 있습니까?

답변

3

익명 형식을 serialize하고 이와 같은 캐시에 저장할 수 없으며 불행히도 List<A>을 만들어 저장해야합니다.

익명 형식을 비교하여 serialization 및 deserialization을 수행 할 필요가 없기 때문입니다. 간단히 말해 익명 유형이 무엇인지 알 수있는 방법이 없습니다. 이름에서 알 수 있듯이 익명입니다.

+0

Booo. ASP.Net 캐시는 잘 처리 할 수 ​​있지만 직렬화 또는 무언가없이 객체 자체를 메모리에 저장한다는 것을 알 수 있습니다. – Toodleey

+0

나는 이것이 사실 일 것이라고 믿는다. – ChrisBint

+1

.. 물론 메모리에 저장하는 것 (직렬화 할 필요가 없다는 것)은 장점이 있습니다. 캐시는 프로세스 전체에 공유되지 않고, 내구성이 떨어지며, 웹 서버에 대한 메모리 부담 등등 매우 단점이 있습니다. 옵션에 무게를 가하고 전화를 걸면됩니다. –