Кэш AppFabric и сериализация объектов IQueryable
Я экспериментирую с кэшированием AppFabric и столкнулся с проблемой сохранения полученных данных в кеше. Корень проблемы в том, что для кэширования AppFabric требуется, чтобы данные имели атрибуты DataContract и Datamember, применяемые к сохраняемому классу.
Если это так, то как я могу сохранить это (упрощенный код):
var q = (from u in dbContext.Users
select new
{
Name = u.Name,
Id = u.RowId
});
cache.Put(“test”, q.ToList());
Вызов 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 мог его кешировать?
Спасибо,
стог
1 ответ
Решение
Дело не в том, что вы пытаетесь создать 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());
Убедитесь, что класс Serializable