实体框架:如何关联2个表

时间:2010-06-21 04:36:24

标签: entity-framework entity

我有以下表格:

配置文件:

ProfileID(主键)
ProfileName等。

联系人:

ContactID(主键)
ProfileFromID(外键)
ProfileToID(外键)
消息varchar(50)等

个人资料可能有很多联系信息。因此,给定的消息将由谁发送消息以及消息发送给谁。

我很难在两张桌子之间建立关系。它很容易将Profile.ProfileID连接到Contact.ProfileIDFrom。

但我也想将Profile.ProfileID连接到Contact.ProfileIDTo

所以......稍后我想在我的实体中查询如下......

Profile.MessageFrom会给我个人资料名称和... Profile.MessageTo会给我个人档案名称....

我希望能够为ProfileIDFrom和ProfileIDTo提取个人资料名称。

我不知道如何连接2个表。

2 个答案:

答案 0 :(得分:3)

您必须在数据库中创建两个外键:

-- 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

向模型中的Contact实体添加两个导航属性。例如ProfileFromProfileTo

您可以使用预先加载来执行以下查询:

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);
                  }
      }

答案 1 :(得分:0)

您有来自联系人 - 个人资料(* - 1)

的2个(外键)关系

但就ORM而言,您可能需要根据用例创建两个或更多不同的实体(类型?),这些实体是别名 (我不熟悉entity-framewrk)