EF6中,如何关闭检索缓存数据,每次都从数据库中检索?

zlhxx90 2017-07-20 02:08:47
我的环境是VS2017,EF6,Mysql.winform
我的框架中,允许用LINQ To EF执行检索操作,同时也有直接执行SQL语句的方法。目前遇到下面问题,需要关闭EF6的缓存。
1 用LINQ,检索结果,数据A的字段1的内容=100.
2 用直接执行SQL语句的方法,将数据A的字段1,内容更新为200.
3 再次用LINQ检索数据A,字段1的内容仍然是100.
由于我这边是winform程序,DbContext不是每次执行就close的。另外,多台机器连一个mysql服务器,数据经常会被其他机器更新。
所以本机的EF缓存是不可靠的,要求每次都去数据库检索,应该怎么处理?
我找到的方法都有点问题:
1 每次执行检索,都new一个DbContext。这个由于是winform,不太好处理。
2 用 AsNoTracking。这个有点问题,要判断业务上是单检索呢,还是检索后要更新。
...全文
1274 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlhxx90 2017-07-24
  • 打赏
  • 举报
回复
我查看了msdn的文档,没有找到每次检索都要查询数据库的属性。。
zlhxx90 2017-07-24
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
每次查询自然是要创建一个 DbContext。为什么'由于是winform,不太好处理"?难道winform不让你 new 一个对象实例?
我参照DbContext最好的使用方法的说明,其中说web程序是一个request一个DbContext,winform最好是一个画面一个DbContext。
  • 打赏
  • 举报
回复
每次查询自然是要创建一个 DbContext。为什么'由于是winform,不太好处理"?难道winform不让你 new 一个对象实例?
正怒月神 2017-07-21
  • 打赏
  • 举报
回复
引用 5 楼 zlhxx90 的回复:
AsNoTracking是对每句SQL单独起作用,而且用了就无法执行对应的更新操作了。 在业务上不知道取出来的这条数据,是肯定不更新,还是有时候要更新的。 我想知道全局的处理,检索的数据,不要缓存,每次都从数据库中读取。我觉得这个设定很常用啊,就是关闭缓存。
关于AsNoTracking导致的更新问题是能解决的。网上有很多方案。 至于你说的不启用缓存,普遍都是 using(dbcontext db=new .......)使用完自己释放的。 但是你说你们的dbcontext在底层架构就不释放。所以也用不了
zlhxx90 2017-07-21
  • 打赏
  • 举报
回复
引用 4 楼 hanjun0612 的回复:
如果你没办法对dbcontext释放或重建。 那么你就使用 AsNoTracking() http://blog.csdn.net/u011127019/article/details/53942012
AsNoTracking是对每句SQL单独起作用,而且用了就无法执行对应的更新操作了。 在业务上不知道取出来的这条数据,是肯定不更新,还是有时候要更新的。 我想知道全局的处理,检索的数据,不要缓存,每次都从数据库中读取。我觉得这个设定很常用啊,就是关闭缓存。
正怒月神 2017-07-21
  • 打赏
  • 举报
回复
如果你没办法对dbcontext释放或重建。 那么你就使用 AsNoTracking() http://blog.csdn.net/u011127019/article/details/53942012
zlhxx90 2017-07-21
  • 打赏
  • 举报
回复
引用 2 楼 q107770540 的回复:
https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx
这个和我问题关系不大啊。LazyLoadingEnabled 不是用于关联数据的加载模式吗? 我的问题是数据缓存的问题。数据检索后,数据库中的数据被修改,再次检索仍然是旧数据。 我的是winform,不是每次都新建一个DbContext。我又不想判断业务上,是否要判断加AsNoTracking。
q107770540 2017-07-21
  • 打赏
  • 举报
回复
To turn off lazy loading for all entities in the context, set its configuration property to false:
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Core.Objects;
using System.Linq;
    
public partial class SchoolDBEntities : DbContext
{
    public SchoolDBEntities(): base("name=SchoolDBEntities")
    {
        this.Configuration.LazyLoadingEnabled = false;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
}
Rules for lazy loading: context.Configuration.ProxyCreationEnabled should be true. context.Configuration.LazyLoadingEnabled should be true. Navigation property should be defined as public, virtual. Context will NOT do lazy loading if the property is not defined as virtual.
本课程系列通过对Mysql数据库的当前业界应用情况和未来发展应用前景的分析作为切入点,结合Mysql企业应用的热点关键功能,尽量用通俗易懂的方式讲给大家。本课程是作者收集了大量资料,参考很多讲师的精华内容,坚持半年利用业余时间,每天早上坚持录制一节课程,对内容不断的提炼打磨,不断的对知识点进行思考总结,最后把自认为满意的结果呈现给大家,个人精力有限难免有不足支持,希望大家多交流留言,提出宝贵意见,促使不断优化改进。本系列课程主要由以下部分组成:一,MySql概述数据库概念,主流数据库介绍,Mysql概述,MySql版本介绍,外围工具,MySql分支版本发展,数据库发展前景,数据库的应用发展。Mysql安装。二,MySql架构体系结构,sql执行过程,逻辑结构,物理结构,数据库实例,存储引擎 三,MySql常用操作数据库,权限表,表内容,常用函数,备份与恢复,存储过程,触发器,事务四,MySql优化需求设计SQL语句:索引的优化,sql语句的优化,表的优化运维配置角度五,MySql集群部署主从复制,读写分离六,高级应用(开发)Mybats访问数据库,JDBC,NET平台EF框架等操作数据库,Mysql在大数据项目应用事务及分布式事务ß【课程目标 】Þ了解MySQl数据库架构 Þ掌握数据库基本操作Þ数据库设计一般方法 Þ数据库优化Þ数据库集群应用

8,497

社区成员

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

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