2013-02-27 43 views
2

我是LINQ和实体框架的新手。我一直在使用以下方法从数据库中提取集合:默认情况下LINQ和实体框架如何加载?

var Publications = from pubs in db.RecurringPublications 
        select pubs; 

Publications表通过外键链接到其他表。我一直在使用这种引用这样的性质:

Publications.Single().LinkedTable.LinkedTableColumn 

,有时甚至进一步下跌的链条:

Publications.Single().LinkedTable.LinkedTable.LinkedLinkedTableColumn 

我知道你可以指定延迟加载或预先加载,我想知道它是如何的默认处理。默认情况下是否有最大深度?它是否找出了在编译时要使用多少个连接?

回答

5

它只会急于加载该特定表中的内容。

var Publications = from pubs in db.RecurringPublications 
        select pubs; 

只会从您的RecurringPublications表中获取数据。您可以指定是否要加载其他属性,但如果您未指定任何内容,则只会提供您所要求的内容 - 仅此而已。

Publications.Single().LinkedTable.LinkedTableColumn 

是懒加载您LinkedTableColumn - 现在,如果你的回报是可查询的(这是到目前为止),它会做一个连接,并返回一个SQL查询。

但是,如果该呼叫已被列举,它将进行第二次呼叫。

Blog post MSDN上有关信息

+0

+1的链接!这也帮助我很多:p – bas 2013-02-27 19:26:00

+0

但是.LinkedTable.LinkedTable呢? – 2013-02-27 20:24:00

+0

与上面相同 - 如果未查询,它将在所有3个表(或任意数量的表)之间进行连接。如果它已被枚举,它将为延迟加载做另一个调用。 – 2013-02-27 20:42:27