2010-10-07 4 views
0

J'expérimente la mise en cache d'AppFabric et j'ai rencontré un problème avec l'enregistrement des données récupérées dans le cache. La racine du problème est qu'il semble que AppFabric Caching nécessite que les données aient des attributs DataContract et Datamember appliqués à la classe en cours d'enregistrement.Cache AppFabric et sérialisation des objets IQueryable

Si tel est le cas, alors comment puis-je enregistrer ce (code simplifié):

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

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

Calling Put fait cette exception:

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. 

Comment puis-je sérialiser les résultats d'un IQueryable alors AppFabric peut le mettre en cache?

Merci,

Rick

Répondre

1

Il est pas que vous essayez de faire une IQueryable, il est que votre type est anonyme. Essayez de créer un cours pour vos résultats, puis créez un de ceux à stocker.

[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()); 

Assurez-vous que la classe est Serializable

+0

Je pensais que, le seul problème est que je vais avoir des dizaines de ces classes pour maintenir. – rboarman

+0

Comment vous attendiez-vous à sortir les classes du cache à nouveau? Une autre alternative serait XML sérialiser l'objet dynmiquement sur save. Vous pouvez le faire avec une méthode d'assistance sur l'objet cache. –

Questions connexes