2010-09-21 3 views
2

Je travaille sur une application Silverlight 4.0 et j'utilise les services RIA. J'ai créé une classe sur le côté serveur auquel sont associés les attributs DataContract et DataMember. Un DomainService expose cette classe en tant que résultat de requête et, en tant que tel, génère du code sur le client. Mais d'une manière ou d'une autre, cela ne génère pas de code pour toutes les propriétés de la classe. Les propriétés primitives de type guid, string, int, bool etc sont générées très bien, mais si j'ai une propriété de mon propre type complexe, cette propriété n'est pas créée sur le client.RIA DomainService ne génère pas de code client à l'aide de DataContracts

est ici la classe en question:

[DataContract] 
    [KnownType(typeof(SummaryGroup))] 
    public class SummaryDataSet 
    { 
     public SummaryDataSet() 
     { 

     } 

     [KeyAttribute] 
     [DataMember] 
     public Guid Guid { get; set; } 

     [DataMember] 
     public SummaryGroup SummaryGroup { get; set; } 

    } 

La propriété Guid est créé sur le client très bien. La propriété SummaryGroup n'est pas créée sur le client. Voici le code du SummaryGroup:

[DataContract] 
public class SummaryGroup 
{ 
    public SummaryGroup() 
    { 
    } 

    [KeyAttribute] 
    [DataMember] 
    public Guid Guid { get; set; } 

    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public int Sequence { get; set; } 
} 

Les deux classes sont dans le même espace de noms. Question: pourquoi la propriété SummaryGroup de SummaryDataSet n'est pas créée sur le client et que dois-je faire pour résoudre ce problème?

Répondre

3

WCF RIA ne peut pas gérer des types complexes, mais vous pouvez essayer ceci:

[DataContract] 
    [KnownType(typeof(SummaryDataSet))] 
    public class SummaryDataSet 
    { 
     public SummaryDataSet() 
     { } 

     [KeyAttribute] 
     [DataMember] 
     public Guid Guid { get; set; } 

     [DataMember] 
     [Association("SummarySet_SummaryGrp_FK", "Guid", "Guid")] 
     public SummaryGroup SummaryGroup { get; set; } 

    } 

Cela donne l'information RIA pour relier le SummaryDataSet au SummaryGroup.

Ceci suppose que vous pouvez demander à la fois le SummaryDataSet et le SummaryGroup du service côté serveur.

+0

Oui, l'utilisation d'associations est en effet le chemin à parcourir - j'ai des choses à faire maintenant. Question connexe: n'ayant jamais entendu parler du terme DTO (Data Transfer Object) auparavant, SummaryDataSet en serait-il un? – JeroenNL

+0

Je pense que ce genre de question dépend de votre point de vue. Le modèle DTO est défini ici http://en.wikipedia.org/wiki/Data_transfer_object. Je dirais que SummaryDataSet est un exemple de la prise en main de RIA de WCF sur un DTO. Dans mes projets RIA, j'ai souvent un emballage autour de ces types d'objets pour les rendre plus acceptables pour mon approche MVVM. J'espère que cela t'aides. – Rus

Questions connexes