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
所以,一切都很好,我可以離開了加入和數據顯示正常。 我可以通過從數據庫生成數據模型來創建數據模型。
它給了我一個模型,我期待:
然後我嘗試運行下面的一段代碼,看看數據是從實體框架正確填寫:
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密鑰和數據,它是正確的....
它確實有效,但您需要讓Lazy Loading和Proxies使其成爲「automagic」。否則,您需要顯式加載屬性。 – CodingGorilla
@CodingGorilla啊,那是我所缺的?我試圖啓用延遲加載....就像從http://msdn.microsoft.com/en-us/library/dd456846.aspx但是...我無法從上下文中找到ContextOption屬性...請告訴我.NET 3.5有它....? –
@KingChan我認爲它(我不記得了),但它在3.5的不同,我記得Da_Wolf可能是正確的,因爲它不工作很正確。直到4歲時我纔是EF的忠實粉絲,所以我沒有用3.5做很多。 – CodingGorilla