2012-01-26 102 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

相關問題