【发布时间】: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