2011-08-10 3 views
1

Existe-t-il un moyen de 'joindre' deux tables DB afin que je puisse obtenir l'ID de la 1ère table puis utiliser cet ID pour obtenir la description d'une 2ème table?Linq aux entités pour joindre deux tables

Par exemple, la requête suivante obtient l'ID de la pièce, mais j'ai besoin de trouver la description de cet ID de pièce afin que je puisse mettre la description sur une grille de données. J'ai essayé d'utiliser 'Include' sur le serveur Web mais cela a échoué pendant l'exécution.

var query = myContext.Get_Table1(); 
query = query.Where(c => c.Part_ID == '12345'); 
LoadOperation<My.Web.Table1> loadOp = this.maxContextTransactionHistory.Load(query, QueryCompletedCallback, null); 
this.dataGrid.ItemsSource = loadOp.Entities; 

Répondre

1

Je suppose que vous utilisez les services WCF RIA? Il aurait été utile que vous ayez tagué votre question pour l'indiquer. Si cela est le cas, vous devrez utiliser la méthode Include dans votre DomainService pour inclure l'entité associée dans les résultats de la requête.

Vous devrez également appliquer le IncludeAttribute à l'association pour vous assurer qu'ils sont rassemblés auprès du client. Vous pouvez appliquer l'attribut à une classe 'Buddy' qui est couverte here.

En théorie, il suffirait d'appliquer IcludeAttribute directement aux propriétés dans les classes d'entités générées. Là, ils seraient écrasés.

Le choix suivant serait dans une classe partielle. L'ajout d'une autre propriété avec la même signature (de sorte que l'attribut peut lui être appliqué) provoquerait un conflit avec la propriété d'origine.

La solution consiste à utiliser une nouvelle classe définie dans une classe partielle. L'attribut MetadataType est utilisé sur la classe partielle pour indiquer la classe dans laquelle ses métadonnées sont définies.

Le code suivant s'assurera que Part_Table de Part_Stock est inclus lorsqu'il est envoyé au client. Vous aurez besoin d'un code similaire pour couvrir toutes les autres propriétés qui vous intéressent.

[MetadataTypeAttribute(typeof(Part_Stock.Metadata))] 
public partial class Part_Stock 
{ 

    internal sealed class Metadata 
    { 
     // Metadata classes are not meant to be instantiated. 
     private Metadata() 
     { 
     } 

     [Include] 
     public EntityCollection<Stock_Table> Stock_Table { get; set; } 
    } 
} 
+0

Merci beaucoup pour votre aide. J'ajoute le 'Include()' au fichier d'entités mais je ne savais pas comment ajouter la partie 'IncludeAttribute' à quel fichier (fichier metadata.cs)? Souhaitez-vous donner plus de détails sur l'ajout de la partie IncludeAttribute? Apprécier ton aide. C'est la partie 'Include() ": return this.ObjectContext.Part_Stock.Include (" Part_Table "). Include (" Part_Table.Part_Description "); –

+0

J'ai ajouté le code pour la classe' Buddy '. –