2012-02-20 36 views
1

我在我的EDMX中有一堆实体,我将LazyLoading设置为false。 据我所知,我现在必须显式加载每个查询实体实体。 然而,我发现最多的参考文献指向DbContext而不是ObjectContext用EF 4.1在LINQ查询中急切加载一个实体ObjectContext

而且看起来有很大的区别,因为在代码中如何进行热切加载。 在我的情况下,我有1:1关系的客户和地址。

如何正确加载地址时,例如,客户#1488?

from c in context.Customers 
where c.Id = 1488 
select c; 

然后,我希望能够用c.Address.Streetc.Address.City

如何加载地址(ES)?

+0

是'客户'和'Addresses' 1:1奥德1:N(只是因为你提到的“地址(ES)”如果它是1:1,你也可以考虑改变模型,使'客户'和'地址'是映射到两个表的一个实体。 – 2012-02-20 13:24:47

+0

一个客户有0或1个地址。 – John 2012-02-20 16:05:49

回答

1

其他人可能会给你一个关于DbContext更准确的答案。我一般用ObjectContext在哪里工作这段代码将做的工作:

from c in context.Customers.Include("Addresses") 
where c.Id = 1488 
select c; 
+0

这实际上似乎工作,谢谢。在没有写字符串的情况下这样做?如果Addresses实体更改名称,我必须更新所有字符串。是不是有Entities.EntityNames.Addresses之类的东西? – John 2012-02-21 07:50:42

+0

没有开箱即用的方法,但看看这里:http://stackoverflow.com/questions/2586351/ef4-linq-includestring-alternative-to-hard-coded-str ing – 2012-02-21 08:29:21

+0

@John:嗨,我今天遇到了这个:http://stackoverflow.com/questions/9591934/how-to-include-subset-in-ef#comment12166241_9591985 – 2012-03-07 08:09:08