Кэш AppFabric и сериализация объектов IQueryable - PullRequest
0 голосов
/ 07 октября 2010

Я экспериментирую с кэшированием AppFabric и столкнулся с проблемой сохранения полученных данных в кеше. Корень проблемы в том, что для кэширования AppFabric требуется, чтобы данные имели атрибуты DataContract и Datamember, применяемые к сохраняемому классу.

Если это так, то как я могу сохранить это (упрощенный код):

var q = (from u in dbContext.Users
                         select new
                         {
                             Name = u.Name,
                             Id = u.RowId
                         });

cache.Put(“test”, q.ToList());

Calling Put вызывает это исключение:

System.Runtime.Serialization.InvalidDataContractException was caught
 Message=Type '<>f__AnonymousTypec`6[System.Int32,System.String,System.Nullable`1[System.Int32],System.Boolean,System.Nullable`1[System.Int32],System.Int32]' cannot 
be serialized. Consider marking it with the DataContractAttribute attribute, and 
marking all of its members you want serialized with the DataMemberAttribute 
attribute.  If the type is a collection, consider marking it with the CollectionDataContractAttribute.  See the Microsoft .NET Framework 
documentation for other supported types.

Как можно сериализовать результаты IQueryable, чтобы AppFabric могла его кешировать?

Спасибо,

Rick

1 Ответ

1 голос
/ 08 октября 2010

Дело не в том, что вы пытаетесь создать IQueryable, а в том, что ваш тип - Anonymous. Попробуйте создать класс для ваших результатов, а затем создать один из них для хранения.

[Serializable]
public class UserIDPair
{
    public string Name {get;set;}
    public int ID {get;set;}
}

var q = (from u in dbContext.Users
    select new UserIDPair
    {
        Name = u.Name,
        Id = u.RowId
    });

cache.Put(“test”, q.ToList());

Убедитесь, что класс является Сериализуемым

...