EF6 有查询缓存,怎么办???

刘欣的博客 2016-05-18 11:53:52
EF6 项目,SQLserver 2008 (10.0.2531) 很简单的查询一张表的数据:




var allpages = from c in po.db.MM_GR_ITEM.AsNoTracking()
where
(
c.GRID.Equals(line)
)
orderby c.GRID ascending
select c;



发现显示数据被EF缓存(不是其它地方缓存,变量已经用时间戳测试过)。

修改数据库表中主键字段,前台界面可以立即显示出来,修改非主键字段,前台界面还是显示的原来的。






...全文
4331 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
stonemqy 2018-01-26
  • 打赏
  • 举报
回复
同意5楼的说法
stonemqy 2018-01-26
  • 打赏
  • 举报
回复
引用 7 楼 qq_36701512 的回复:
EF查询(不使用缓存):Set<T>().AsNoTracking() 例:from s in cont.Set<T>().AsNoTracking() select s; cont.Set<T>.AsNoTracking().ToList(); cont.Set<T>.Where(strWhere).AsNoTracking().ToList();
这么干,会影响提交结果吧
qq_36701512 2016-11-14
  • 打赏
  • 举报
回复
EF查询(不使用缓存):Set<T>().AsNoTracking() 例:from s in cont.Set<T>().AsNoTracking() select s; cont.Set<T>.AsNoTracking().ToList(); cont.Set<T>.Where(strWhere).AsNoTracking().ToList();
圣殿骑士18 2016-05-20
  • 打赏
  • 举报
回复
引用 5 楼 ot512csdn 的回复:
[quote=引用 4 楼 daixf_csdn 的回复:] 你是不是采用了全局DbContext一直没释放。在一个DbContext的作用范围内,数据会被缓存
就是这个问题,非常感谢你的答复,用全局类用一个dbcontext这个方式,还是问的一个高手,结果看来他还理解不够哇。。。。 那么在一个应用里,要有多少个国王DataContext才行呢? 根据各种经验显示,对Asp.Net网站,应该是每一个请求一个DataContext,对于Winform以及WPF应该是每个窗体或表现一个DataContext,对于WebService应该是每个调用一个DataContext; [/quote] 一般来说是用完即释放,和用数据库连接Connection类似
刘欣的博客 2016-05-20
  • 打赏
  • 举报
回复 1
引用 4 楼 daixf_csdn 的回复:
你是不是采用了全局DbContext一直没释放。在一个DbContext的作用范围内,数据会被缓存
就是这个问题,非常感谢你的答复,用全局类用一个dbcontext这个方式,还是问的一个高手,结果看来他还理解不够哇。。。。 那么在一个应用里,要有多少个国王DataContext才行呢? 根据各种经验显示,对Asp.Net网站,应该是每一个请求一个DataContext,对于Winform以及WPF应该是每个窗体或表现一个DataContext,对于WebService应该是每个调用一个DataContext;
wireboy 2016-05-18
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390923572?page=1&c=8f52c433dac819b7d0219491fe67194f
圣殿骑士18 2016-05-18
  • 打赏
  • 举报
回复
你是不是采用了全局DbContext一直没释放。在一个DbContext的作用范围内,数据会被缓存
刘欣的博客 2016-05-18
  • 打赏
  • 举报
回复
继续测试,发现了问题点, 不是缓存问题。 在SQL Server Management Studio中编辑了表的某字段数据,在EF中就是不生效。 而EF6或SQL TO LINQ 修改了表的某字段数据就是会生效。。。。。。 难道是“SQL Server Management Studio中编辑器”有BUG?????????
刘欣的博客 2016-05-18
  • 打赏
  • 举报
回复
继续建了一个WINFORM来测试。


private void button1_Click(object sender, EventArgs e)
        {   
            var allpages = (from c in db.GR
                           where
                           (
                                 c.ID.Equals(12)
                           )                        
                            select c).FirstOrDefault();

            label1.Text = allpages.WERKS;
        }

数据库里面改了表的一个字段值,label1还是显示老的。 再用LINQ TO SQL来建ORM,仍然一样的情况,这是数据被查询缓存了吗?

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧