2010-12-02 21 views
0

Supposons que vous avez les tableaux connexes suivants (Stores -> Categories -> Products)WCF RIA Services/LINQ to SQL: inclure la propriété des tables étrangères

  • Magasins
  • Catégories
  • Produits

Et Je veux créer une grille pour éditer Products. C'est simple avec RIA Services. Mais que faire si je veux aussi montrer StoreName de Stores et CategoryName de Categories dans ma liste Products? Les deux colonnes supplémentaires doivent être en lecture seule.

Comment cela peut-il être mis en œuvre?

Mise à jour: J'essaie de le faire dans sa forme la plus simple. Ce n'est pas un ViewModel, mais seulement un glisser-déposer, le code (le cas échéant) ira dans codebehind. J'utilise Ling2Sql et retourne l'implémentation par défaut pour la requête GetProducts.

Cordialement

Larsi

Répondre

0

Comment avez-vous cette configuration? Êtes-vous lié à un ViewModel ou simplement en utilisant le code derrière? Le service Web renvoie-t-il une liste d'objets Product LINQ ou faites-vous autre chose?

Il existe plusieurs options, mais cela dépend vraiment de ce que vous essayez de faire.

+0

Désolé, pas très claire. J'ai ajouté quelques informations supplémentaires – Larsi

0

La manière la plus simple de le faire est d'annoter votre fichier de métadonnées pour les produits et de laisser la grille générer les colonnes pour vous.

Par exemple, vos tables regarderont probablement quelque chose comme ceci:

Product 
    int Id; 
    string ProductName; 
    int CategoryId; 

Category 
    int Id; 
    string CategoryName; 
    int StoreId; 

Store 
    int Id; 
    string StoreName; 

Maintenant, lorsque vous créez votre service, vous pouvez inclure les 3 tables/entités de votre modèle de domaine et avoir générer le fichier de métadonnées pour toi. Dans ce fichier, annoter correctement les objets comme ceci:

internal sealed class ProductMetadata 
{ 
    [Key] 
    [Bindable(false)] 
    [Display(AutogenerateField=false)] 
    public int Id { get; set; } 

    [Bindable(true, BindingDirection.TwoWay)] 
    [Display(Name="Product")] 
    [StringLength(20, MinimumLength=3)] 
    public string ProductName { get; set; } 

    [Bindable(false)] 
    [Display(AuteogenerateField=false)] 
    public Category Category { get; set; } 

    [Required] 
    [Bindable(false)] 
    [Display(AutogenerateField=false)] 
    public CategoryId { get; set; } 
} 

Vous pouvez faire la même chose pour les métadonnées de vos autres objets.

La seule autre chose que vous pourriez avoir à faire est d'ajouter 2 autres colonnes à votre réseau, et demandez-leur carte à Product.Category.CategoryName et Product.Category.Store.StoreName

+0

Salut, désolé pour la réponse tardive, mais comment sait-il réellement qu'il devrait inclure les informations du magasin lorsque j'appelle le GetProducts? Inclut-il toujours toutes les tables forrigin ?, ou est-ce que c'est une des métadonnées qui le fait? – Larsi

+0

@Larsi: iirc, lorsque vous appelez myProduct.Category.Store (où myProduct est un produit renvoyé via votre méthode GetProducts), les services RIA chargent paresseux la catégorie et le magasin associés au produit. –