DataContext如何工作?

时间:2012-08-08 13:14:08

标签: asp.net sql-server linq-to-sql webforms

我有一个名为dtContext的DataContext,它有许多实体。现在我在数据库中的数据是巨大的,所以我想知道如果我创建一个新的DataContext,我的数据库中的所有数据都会被提取到实体中吗?这意味着一旦新的完成,所有实体都会从我的数据库中填充数据?或者仅在从LINQ查询中调用实体时才获取数据? 例如:

line 1: dtContext dt = new dtContext();
line 2: IEnumerable<MyEntity> query = from q in dt.MyEntities select q;

MyEntities在哪一行代表数据库中的实际数据?

4 个答案:

答案 0 :(得分:1)

在您枚举查询或致电ToList()ToArray()等之前,它不会查询您的数据库。这称为Deferred Execution

  

许多标准查询运算符在迭代时返回元素   过度使用foreach声明。这些运营商基本上没有   工作UNTIL请求第一个元素,然后暂停直到   请求下一个元素。在迭代返回的查询之前,   这些陈述中没有任何内部工作。这个   延迟执行允许您控制何时以及是否可能   进行了漫长的工作。

     

如果要立即实现查询,请调用ToList,ToArray   或任何其他需要枚举整个运算符的运算符   序列返回结果。

     

LINQ利用C#2.0中添加的语言功能,使其更简单   在编写迭代时一次返回一个元素的方法时   过度。 yield return语句基本上会挂起循环   返回一个值,准确地回到下次停止的地方   调用MoveNext。

     

MSDN库将使用延迟执行的运算符描述为:

     

此方法使用延迟执行实现。眼前的   返回值是一个存储所需信息的对象   执行动作。此方法表示的查询不是   执行,直到通过调用它来枚举对象   直接使用GetEnumerator方法或在Visual C#或For中使用foreach   每个都在Visual Basic中。

答案 1 :(得分:1)

没有答案。由于您没有编写查询,因此第一行不会获取任何数据。第二行不会获得任何数据,因为您只是编写了查询但没有执行它。迭代结果时可以执行查询(如foreach,ToArray(),First()等)

答案 2 :(得分:1)

您指的是名为急切加载延迟加载you might find this usefuland also this的功能。

答案 3 :(得分:0)

您尝试迭代查询结果集的点。

如果要撤回数据的子集,请在查询中添加where子句。