欢迎光临

木子屋

标题: Entity Framework延时执行导致缓存失效解决方法

作者: dnawo

日期: 2012-08-24 10:49 AM

分类: Win编程

内容: 在《Entity Framework 4.3简单使用示例》的基础上，希望能对数据进行缓存，写了个示例：
复制内容到剪贴板 程序代码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.ToList();
Console.WriteLine(((List<Categories>)container["categories"]).First().CategoryName);
}
Console.ReadKey();
}
}
}

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.691 ms

返回

标题: Entity Framework延时执行导致缓存失效解决方法

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.691 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.725 ms

返回