我有以下表格:
配置文件:
ProfileID(主键)
ProfileName等。
联系人:
ContactID(主键)
ProfileFromID(外键)
ProfileToID(外键)
消息varchar(50)等
个人资料可能有很多联系信息。因此,给定的消息将由谁发送消息以及消息发送给谁。
我很难在两张桌子之间建立关系。它很容易将Profile.ProfileID连接到Contact.ProfileIDFrom。
但我也想将Profile.ProfileID连接到Contact.ProfileIDTo
所以......稍后我想在我的实体中查询如下......
Profile.MessageFrom会给我个人资料名称和... Profile.MessageTo会给我个人档案名称....
我希望能够为ProfileIDFrom和ProfileIDTo提取个人资料名称。
我不知道如何连接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实体添加两个导航属性。例如ProfileFrom
和ProfileTo
。
您可以使用预先加载来执行以下查询:
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)