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