EF加载和延迟加载的差异?

haa*_*nsi 1 .net c# entity-framework-4

我是EF的新手并且阅读了一些文章.阅读后,我对延迟加载和急切加载有什么区别感到困惑?

  • 可以编译这两种类型的查询吗?
  • 这两个类型的查询可以返回IQuerableIEnumerable
  • 两种类型的查询都可以使用Linq to Entities查询syntex(select,from,where)和lambda表达式吗?

请指导和帮助我.

非常感谢您的时间和指导

Chr*_*heD 7

关于懒惰渴望加载之间的区别:

假设您有一个Customer具有属性的对象List<Invoice> Invoices(它位于不同的表中并由实体框架自动连接).

lazy加载时,实例化Customer对象时不会立即获取发票,但仅在需要时/明确访问它.

通过eager加载,您的发票将立即被提取并构建/填充在对象上(如果您构建了大量的客户列表,但实际上并不需要在对象上提供所有发票,则会引入一些不必要的性能开销).

你会在这里找到一些文档.

  • +1确切地说,这意味着 - 如果你不小心 - 你可能遇到N + 1问题:你得到了'Customer`对象然后你想要迭代'Invoices`.这意味着您将为客户拨打1个DB,并且N会呼叫所有发票,因为它们是逐个提取的.那就是当你在原始查询中"包含"`Invoices`以在一次数据库调用中急切地获取它们时. (3认同)