默认情况下LINQ和Entity Framework的加载程度如何?

Leg*_*ion 2 .net c# linq entity-framework entity-framework-5

我是LINQ和实体框架的新手.我一直在使用以下方法从数据库中获取集合:

var Publications = from pubs in db.RecurringPublications
                   select pubs;
Run Code Online (Sandbox Code Playgroud)

Publications表通过外键链接到其他表.我一直用它来引用这样的属性:

Publications.Single().LinkedTable.LinkedTableColumn
Run Code Online (Sandbox Code Playgroud)

有时甚至在链条的下游:

Publications.Single().LinkedTable.LinkedTable.LinkedLinkedTableColumn
Run Code Online (Sandbox Code Playgroud)

我知道你可以指定延迟加载或急切加载,我想知道默认情况下它是如何处理的.默认情况下是否有最大深度?它是否计算出在编译时使用多少连接?

Mar*_*eta 5

它只会急切地加载特定表格中的内容.

var Publications = from pubs in db.RecurringPublications
                   select pubs;
Run Code Online (Sandbox Code Playgroud)

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

Publications.Single().LinkedTable.LinkedTableColumn
Run Code Online (Sandbox Code Playgroud)

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

但是,如果已经枚举了呼叫,它将进行第二次呼叫.

博客发布到MSDN的信息