【问题标题】:how does DataContext works?DataContext 是如何工作的?
【发布时间】:2012-08-08 13:14:07
【问题描述】:

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

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

MyEntities 将在哪一行表示来自数据库的实际数据?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    LINQ 利用 C# 2.0 中添加的语言功能,使其更简单 在编写迭代时一次返回一个元素的方法时 超过。 yield return 语句本质上是通过 返回一个值,在下一次 a 调用 MoveNext。

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

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

    【讨论】:

      【解决方案2】:

      没有答案。由于您没有编写查询,因此第一行不会获得任何数据。第二行也不会得到任何数据,因为您刚刚编写了查询但没有执行它。可以在遍历结果时执行查询(如 foreach、ToArray()、First() 等)

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          如果您想提取数据的子集,请在查询中添加 where 子句。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-02
            • 1970-01-01
            • 1970-01-01
            • 2016-01-15
            • 1970-01-01
            • 2012-10-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多