2010-06-21 7 views
1

je tableaux suivants:cadre de l'entité: Comment relier 2 tables

Profils:

ProfileID (clé primaire)
PROFILENAME, etc.

Contacts:

contactID (primaire Clé)
ProfileFromID (clé étrangère)
ProfileToID (clé étrangère)
Message varchar (50), etc.

Les profils peuvent contenir plusieurs messages de contact. Donc, un message donné aura qui a envoyé le message et à qui le message a été envoyé.

J'ai du mal à établir une relation entre les 2 tables. Il est facile de connecter Profile.ProfileID à Contact.ProfileIDFrom.

Mais je veux aussi vous connecter à Profile.ProfileID Contact.ProfileIDTo

Alors ... plus tard je veux interroger comme suit dans mes entités ...

Profile.MessageFrom me donner le profil nom et ... Profile.MessageTo me donnerait le nom de profil ....

Je veux être en mesure d'extraire les noms de profil à la fois pour ProfileIDFrom et ProfileIDTo.

Je ne sais pas comment connecter les 2 tables.

Répondre

3

Vous devez créer deux clés étrangères dans la base de données:

-- Creating foreign key on [ProfileFromId] in table 'Contacts' 
ALTER TABLE [dbo].[Contacts] 
ADD CONSTRAINT [FK_ProfileContactFrom] 
    FOREIGN KEY ([ProfileFromId]) 
    REFERENCES [dbo].[Profiles] 
     ([ProfileId]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION; 

-- Creating non-clustered index for FOREIGN KEY 'FK_ProfileContactFrom' 
CREATE INDEX [IX_FK_ProfileContactFrom] 
ON [dbo].[Contacts] 
    ([ProfileFromId]); 
GO 
-- Creating foreign key on [ProfileToId] in table 'Contacts' 
ALTER TABLE [dbo].[Contacts] 
ADD CONSTRAINT [FK_ProfileContactTo] 
    FOREIGN KEY ([ProfileToId]) 
    REFERENCES [dbo].[Profiles] 
     ([ProfileId]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION; 

-- Creating non-clustered index for FOREIGN KEY 'FK_ProfileContactTo' 
CREATE INDEX [IX_FK_ProfileContactTo] 
ON [dbo].[Contacts] 
    ([ProfileToId]); 
GO 

Ajouter deux propriétés de navigation pour contacter entité dans votre modèle. Par exemple ProfileFrom et ProfileTo.

Vous pouvez utiliser le chargement désireux de faire des requêtes comme ceci:

using (var ctx = new TestModelContainer()) 
     { 
      foreach (Contact contact in ctx.Contacts 
              .Include("ProfileFrom") 
              .Include("ProfileTo")) 
        { 
         Console.WriteLine("From: {0}, to: {1}, Message: \"{2}\"", contact.ProfileFrom.ProfileName, contact.ProfileTo.ProfileName, contact.Message); 
        } 
     } 
+0

Merci beaucoup !!!! –

0

Vous avez 2 relations (clé étrangère) de Contacts - Profils (* - 1)

Mais aussi loin que ORM-s vous allez avoir besoin de créer 2 ou plusieurs types (qui Entité-?) sont des alias en fonction de vos cas d'utilisation (je ne suis pas au courant de l'entité Framewrk)

Questions connexes