首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架5 DataBase请求

实体框架5 DataBase请求
EN

Stack Overflow用户
提问于 2013-09-28 07:45:40
回答 1查看 31关注 0票数 0

我理解为什么第一个for循环会向数据库产生一个请求,但是为什么第二个for循环会产生对数据库的5个请求?

代码语言:javascript
复制
class Program
{


    static void Main(string[] args)
    {

        TAXIDBEntities1 ctx = new TAXIDBEntities1();
        List<TestObject> Tests;

        //This block makes 1 requests to database

      Tests = ctx.TestObjects.ToList();
      for (int i = 0; i < 5; i++)
      {
          foreach (TestObject item in Tests)
          {
              System.Diagnostics.Debug.WriteLine(item.id);
          }
          System.Threading.Thread.Sleep(2000);
      }

        //This block makes 5 requests to database

      var x = ctx.TestObjects;
      for (int i = 0; i < 5; i++)
      {
          foreach (TestObject item in x)
          {
              System.Diagnostics.Debug.WriteLine(item.id);
          }
          System.Threading.Thread.Sleep(2000);

      }





    }





}

我不明白第二个for循环是怎么回事。有人能解释一下为什么数据库有5个请求,如Sql分析器中所示吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-28 10:31:37

第一个示例中的ToList调用指示EF从数据库读取所有对象并将它们转换为内存中的列表。然后遍历这个列表。

在第二个循环中,您将查询数据库5次。每次foreach循环在GetEnumerator上调用DbSet时,它都会查询数据库。实体框架无法知道自上次执行GetEnumerator以来数据库没有发生任何更改,因此需要进行5次数据库读取。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19064660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档