2008-12-10 9 views
3

Je suit structure de la table:ADO.NET Entity: obtenir des données à partir de 3 tables

Table: Plant 
PlantID: Primary Key 
PlantName: String 

Table: Party 
PartyID: Primary Key 
PartyName: String 
PlantID: link to Plant table 

Table: Customer 
PartyID: Primary Key, link to Party 
CustomerCode: String 

Je voudrais avoir l'objet entité Client champs suivants:

PartyID: Primary Key 
CustomerCode: String 
PartyName: String 
PlantName: String 

Je ne parviens pas à avec le champ PlantName (qui provient de la table Plant J'ai connecté le client à la partie et Party to Plant avec les associations Cependant, je ne peux pas connecter le client à la plante avec l'association (parce qu'il n'en a pas) Je ne peux pas ajouter Pla tableau nt à la cartographie, quand je fais cela - je reçois erreur suivante:

Error 3024: Problem in Mapping Fragment starting at line 352: Must specify mapping for all key properties (CustomerSet.PartyID) of the EntitySet CustomerSet 

Suppression de l'association de l'usine fonctionne. Des indices ou des directions très appréciés.

+0

Avez-vous déjà trouver une solution à ce problème? Je rencontre la même chose. – ern

+0

Avez-vous des clés étrangères dans votre schéma? – RobS

Répondre

3

Vous pouvez obtenir ces champs en utilisant le chemin de référence sur l'objet entité.

Pour obtenir le PartyName, utilisez cette syntaxe: Customer.Party.PartyName

Pour obtenir le PlantName, utilisez cette syntaxe: Customer.Party.Plant.PlantName

+0

Cela fonctionne, mais le champ ne fait pas partie de l'objet Customer ce qui est un inconvénient car je ne peux pas l'ajouter à datagrid (ou à tout autre contrôle de databound) sans écrire beaucoup de code –

1

Après quelques recherches, je suis tombé sur ce thread sur MSDN qui dit que vous pouvez créer une lecture -seule entité, ce qui est assez désavantageux pour ne pas l'utiliser seul, mais cela devient pire. Vous perdrez également la possibilité de mettre à jour tous les modèles dynamiquement en fonction du schéma de la base de données.

2

Vous pouvez étendre l'entité client en utilisant la classe partielle public:

public partial class Customer 
{ 
    public string PartyName 
    { 
    get { return Party.PartyName; } 
    set { Party.PartyName = value; } 
    } 

    public string PlantName 
    { 
    get { return Party.Plant.PlantName; } 
    set { Party.Plant.PlantName = value; } 
    } 
} 
Questions connexes