2012-01-26 103 views
0

我....我重新实体模型和实时数据库夫妇....已经尝试数字了整整一天....为什么我的EntityA包含EntityB,但不是EntityB包含EntityA?

我有3个表,客户,运动和Campaign_Url。

所以关系,

  • 客户可以有很多活动(1 *)
  • 多发活动可以具有相同的Campaign_Url(* 1)

所以活动表有两个关键foregin

  • Campaign.url_id是foregin关键Campaign_Url.campaign_url_id
  • Campaign.client_id是foregin关键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。 但是,当我从Campaign.Client去,我将能够得到它的客户端....

我做了什么错了?当我离开它一起在SQL它正确地返回,我仔细检查了该foregin密钥和数据,它是正确的....

回答

0

据我所知,填充一个一对多的关系,不能与实体工作框架。你必须采取肮脏的方式,逐一填充关系。

+0

它确实有效,但您需要让Lazy Loading和Proxies使其成为“automagic”。否则,您需要显式加载属性。 – CodingGorilla

+0

@CodingGorilla啊,那是我所缺的?我试图启用延迟加载....就像从http://msdn.microsoft.com/en-us/library/dd456846.aspx但是...我无法从上下文中找到ContextOption属性...请告诉我.NET 3.5有它....? –

+0

@KingChan我认为它(我不记得了),但它在3.5的不同,我记得Da_Wolf可能是正确的,因为它不工作很正确。直到4岁时我才是EF的忠实粉丝,所以我没有用3.5做很多。 – CodingGorilla

相关问题