不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
Entity Framework延时执行导致缓存失效解决方法
编辑:dnawo 日期:2012-08-24
在《Entity Framework 4.3简单使用示例》的基础上,希望能对数据进行缓存,写了个示例:
但通过观察SQL Server Profiler发现:缓存是失败的,实际对数据库进行了3次查询:

什么原因呢?联想到Linq的延时执行,猜测EntityFramework也有这种特性?将示例代码稍做了修改:
果然,SQL Server Profiler显示没有执行任何查询:

参考Linq强制立即执行的方法,最终代码修改如下:
复制内容到剪贴板
程序代码

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();
}
}
}
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);
}
{
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();
}
}
}
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 | 引用: 0 | 查看次数: 4688
发表评论
请登录后再发表评论!