using System;
using System.Collections;
using System.Data.Entity;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
//缓存容器
static Hashtable container = new Hashtable();
static void Main(string[] args)
{
CAContext context = new CAContext();
for (int i = 1; i <= 3; i++)
{
if (!container.Contains("categories"))
container["categories"] = context.Categories;
Console.WriteLine(((DbSet<Categories>)container["categories"]).First().CategoryName);
}
Console.ReadKey();
}
}
}但通过观察SQL Server Profiler发现:缓存是失败的,实际对数据库进行了3次查询:

什么原因呢?联想到Linq的延时执行,猜测EntityFramework也有这种特性?将示例代码稍做了修改:
for (int i = 1; i <= 3; i++)
{
if (!container.Contains("categories"))
container["categories"] = context.Categories;
Console.WriteLine(i);
}果然,SQL Server Profiler显示没有执行任何查询:

参考Linq强制立即执行的方法,最终代码修改如下:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
//缓存容器
static Hashtable container = new Hashtable();
static void Main(string[] args)
{
CAContext context = new CAContext();
for (int i = 1; i <= 3; i++)
{
if (!container.Contains("categories"))
container["categories"] = context.Categories[color=Red].ToList()[/color];
Console.WriteLine(((List<Categories>)container["categories"]).First().CategoryName);
}
Console.ReadKey();
}
}
}
评论(0)
暂无评论。