2011-06-27 10 views
0

Je développe une solution avec Silverlight RIA Services. L'une des exigences est de "pousser" la notification aux clients, que j'implémente en utilisant un appel bloquant au serveur, qui retourne quand une mise à jour est reçue. Essayer de mettre en œuvre cette aide d'une structure générique, je suis venu à cette structure de données:RIA Services change tracking

public class Change 
{ 
    public ObjectType Type { get; internal set; } // objecttype is an enum 
    public int ObjectKey { get; internal set; } 
    public string PropertyName { get; internal set; } 
    public object OldValue { get; internal set; } 
    public object NewValue { get; internal set; } 
    //key required for RIA Services 
    [Key] 
    public Guid ChangeGuid { get; private set; } 
} 

En dehors de quelques défauts évidents dans cette conception (ce qui est juste un test), les propriétés OldValue et NewValue ne sont pas visibles sur le client, en raison de leur type d'objet. Les valeurs de ces propriétés seront toujours Entity Framework primitive.

Y a-t-il un moyen d'obtenir OldValue et NewValue au client sans tout convertir en chaînes? Googling ne m'a pas très loin en raison du mot-clé object encombrer les résultats de recherche.

Toute solution générale concernant mon problème est appréciée.

+0

Voulez-vous dire que le type va être soit un String, DateTime ou une autre primitive et vous ne savez pas quel type il sera au moment de la compilation? –

+0

@Isaac Exactement, il peut s'agir de n'importe quel type utilisé en tant que propriété pour un objet Entity Framework. Voir http://msdn.microsoft.com/en-us/library/ee382832.aspx – Bas

Répondre

0

Si vous effectuez une sérialisation sur WCF en tant qu'objet, vous ne pouvez pas réintroduire implicitement d'autres interfaces/types côté client. Vous les sérialisez efficacement comme une chaîne de toute façon.

Les détails internes sur le type d'objet "il est vraiment" ne sont pas conservés à travers la sérialisation.

Que diriez-vous d'un membre nullable, par la valeur d'énumération ObjectType, et fixez seulement celui dont vous avez besoin? Cela peut ajouter une petite surcharge aux données transférées mais peut être plus gérable et vous donnera des objets fortement typés.

+0

En fait, ObjectType est l'objet lui-même, pas la propriété, mais je pourrais ajouter un type de propriété pour ce faire, mais cela nécessiterait un primitive de structure de propriété par entité. – Bas