我理解为什么第一个for循环会向数据库产生一个请求,但是为什么第二个for循环会产生对数据库的5个请求?
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分析器中所示吗?
发布于 2013-09-28 02:31:37
第一个示例中的ToList调用指示EF从数据库读取所有对象并将它们转换为内存中的列表。然后遍历这个列表。
在第二个循环中,您将查询数据库5次。每次foreach循环在GetEnumerator上调用DbSet时,它都会查询数据库。实体框架无法知道自上次执行GetEnumerator以来数据库没有发生任何更改,因此需要进行5次数据库读取。
https://stackoverflow.com/questions/19064660
复制相似问题