2010-11-04 38 views
1

Dans mon application SilverLight, j'ai un modèle d'entité simple contenant une table: [Mémo]. La définition table mémo/mise en page de classe:Silverlight RIA: Les propriétés d'extension côté serveur sur le modèle ne sont pas ignorées par RIA

pseudo-code en mode

Partial Class Memo 
    ID  [int autonumbering] 
    Memo [string] 
    UserID [int] 
End Class 

Pour mon client, je dois voir un nom normal et non un numéro [ID utilisateur] dans l'interface utilisateur donc nous devons traduire ce nombre dans field/property [UserID] en un lisible [UserName].

pour y parvenir, nous allons prolonger le [Mémo] classe côté serveur avec ceci:

pseudo-code en mode

Partial Class Memo 
    UserName [string] 
End Class 

Alors maintenant, nous avons une classe complète contenant à la fois la UserID et UserName (très utile pour que lorsque vous utilisez la liaison à un DataGrid)

au côté client, nous avons une liste mise en cache des utilisateurs, donc au côté client, nous remplirons la propriété UserName après la EntitySet a été toi ploaded au client. C'est où mon problème se produit: Après avoir défini la propriété, l'objet Entity est suivi comme étant modifié par le moteur DomainService (DomainContext.HasChanges = true).

Ainsi, lorsque le chargement d'une grille de données avec 100 dossiers, tous les enregistrements sont marqués changé en raison de définir la propriété UserName dans le client, et après l'édition 1 disque, 100 enregistrements sont affichés sur le serveur comme étant « changé » au lieu d'un seul enregistrement.

Étant donné que cette propriété est une propriété d'extension et que je ne souhaite pas effectuer de suivi des modifications pour le nom d'utilisateur, j'ai pensé: permet d'ajouter l'attribut [Ignorer], mais pas de dés. Le DomainService continue de suivre les modifications du nom d'utilisateur. J'ai également essayé l'attribut [IgnoreDataMember], pas de dé. L'attribut [Exclude] ne fonctionne pas, car il n'est plus projeté côté client.

Je dois donc pouvoir réinitialiser l'état de suivi d'objet du DomainService après le chargement et l'extension des données de la base de données. Une autre solution consiste à étendre les données côté serveur, mais ce n'est pas une option pour l'instant.

Toutes les idées seraient grandement appréciées.

Remco van Diesen

Répondre

1

Si votre nouvelle propriété est requise uniquement côté client, puis ajoutez votre extension de classe partielle du côté client. Pas du côté serveur.

Nous ajoutons souvent de nouvelles propriétés d'aide (comme Fullname, qui renvoie LastName + FirstName) à notre projet de services RIA côté client.

+0

En effet, excellente suggestion, nous avons maintenant les extensions à la fois côté serveur et côté client. Les extensions côté client ne sont pas surveillées par le contexte de la base de données. – Remco