为什么我的EntityA包含EntityB,但EntityB不包含EntityA?

时间:2012-01-26 21:41:44

标签: c# sql sql-server-2005 visual-studio-2008 entity-framework

我....重新创建了我的实体模型和数据库时间......已经试图计算出一整天......

我有3个表,Client,Campaign和Campaign_Url。

所以关系是,

  • 客户可以有多个广告系列(1到*)
  • 多个广告系列可以拥有相同的Campaign_Url(*到1)

因此,Campaign表有两个外键

  • Campaign.url_id是Campaign_Url.campaign_url_id
  • 的外键。
  • Campaign.client_id是Client.client_id
  • 的外键

如图所示:

ALTER TABLE [dbo].[Campaign]  WITH CHECK ADD  CONSTRAINT [FK_Campaign_Campaign] FOREIGN KEY([url_id])
REFERENCES [dbo].[Campaign_Url] ([campaigin_url_id])
GO

ALTER TABLE [dbo].[Campaign] CHECK CONSTRAINT [FK_Campaign_Campaign]
GO

ALTER TABLE [dbo].[Campaign]  WITH CHECK ADD  CONSTRAINT [FK_Campaign_Client] FOREIGN KEY([client_id])
REFERENCES [dbo].[Client] ([client_id])
GO

ALTER TABLE [dbo].[Campaign] CHECK CONSTRAINT [FK_Campaign_Client]
GO

所以一切都很好,我可以保持联接并正确显示数据。 我可以通过从数据库生成数据模型来创建数据模型。

它给了我一个我期待的模型:

enter image description here

然后我尝试运行以下代码来查看数据是否从实体框架中正确填充:

    using (MyEntities dataContext = new MyEntities())
    {
        int totalClient = dataContext.Client.Count();    
        foreach (Client aClient in dataContext.Client)
        {
            int total = aClient.Campaign.Count();   //<===== here is return 0 campagin
        }
        foreach (Campaign aCampaign in dataContext.Campaign)
        {
            string abc = aCampaign.Client.name;  //<====== here the campaign did return the client name
        }

    }

所以这很奇怪,Client.Campaign不包含任何广告系列。 但是当我从Campaign.Client开始时,我将能够获得它的客户端....

我做错了什么?当我离开加入它在sql中它正确返回,我仔细检查了外键和数据,它是正确的....

1 个答案:

答案 0 :(得分:0)

据我所知,填充一对多关系不适用于实体框架。你必须采取令人讨厌的方式,逐一填充关系。