【问题标题】:Does Entity framework populate all records when we create entity collection object?当我们创建实体集合对象时,实体框架会填充所有记录吗?
【发布时间】:2016-03-15 17:08:25
【问题描述】:

我正在开发一个使用实体框架的应用程序。在表单加载方法中,我正在创建实体集合的对象。假设我们有一个Northwind 数据库,EF 模型命名为NorthWindEntities。所以在我的表单加载方法中我正在做这样的事情

using (NorthWindEntites nwdb = new NorthWindEntities)

现在,如果我将鼠标悬停在 nwdb 对象上或添加此对象进行观察并执行类似nwdb.Customers 的操作,我可以看到所有客户实体。

我想知道如果nwdb model 尚未填充Customer 记录,那么如何在添加观察中使用nwdb.Customers 显示客户记录。是不是当我们创建NorthWindEntities 的 nwdb 对象时,它填充了所有实体,并且查询正在本地 nwdb 对象上执行?

如果是,那么这是令人震惊的,因为它们可能有数百万条记录。

【问题讨论】:

  • 我猜这可能是延迟加载 - 当您访问它们时,首先填充虚拟导航属性。当您将鼠标悬停在调试器中的某个属性上时,它会填充您的实体。
  • @MattBurland - 你的意思是说当以下代码运行时查询不会执行:'var query = from customer in db.Customers where customer.City == “Paris” select customer;'但是,如果您将鼠标悬停在 VS 中的“查询”对象上,您可以在其中看到客户实体。如果此时查询对象为空,为什么它们是可见的。?
  • @UsmanMalik:因为通过将鼠标悬停在它们上面你已经强迫它填充。除非你看它们,否则它们不存在。这包括在调试器中。您可能会注意到它在打开之前略有延迟。这就是它获取数据的时候。

标签: .net database entity-framework


【解决方案1】:

EF 仅在您实际尝试对数据执行某些操作时查询您的数据库 - 例如,将其分配为 .ToArray()。当您检查值时,您会强制 EF 查询数据库。如果您启用了延迟加载,您的行为会有所不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多