C#-仓储模式-关于上下文的释放

3 篇文章 0 订阅

首先,在起初没有使用仓储模式时,本人在使用EF上下文基本都用了using标记,随时使用随时释放,如下所示:

using(dbcontext con = new dbcontext()){
	con.xxx......;
}

我们大家哦度知道,EF查询跟踪是存在数据缓存的,如果随时释放将无法利用缓存带来的查询速度提升。

同样,EF缓存也面临查询出现脏数据的问题,各有利弊。

EF是默认开启数据查询缓存的,如果你需要开启缓存后保证查询数据的实时性,可用**AsNoTracking()**方法查询最新数据,如下所示:

using(dbcontext con = new dbcontext()){
	con.xxx.AsNoTracking().Tolist();
}

微软文档原文:https://docs.microsoft.com/en-us/ef/ef6/querying/no-tracking

在项目当中,仓储模式大多数设计都是依赖DI注入来获取上下文对象,那么上下文的生命周期也就是由DI来控制,具体需要根据项目需求来设计。

个人而言,喜欢针对同一模型采用独立的上下文实例对象来保证数据有效性,无论是EF缓存,还是惰性加载等机制,感觉都是为MVC设计,且产生的脏数据问题并没有一套完整的机制来处理,只能用某种方法来规避,而在前后端分离项目当中,往往缓存都是由Redis,Mongodb来负责DB和View之间的数据缓存来保证查询效率,SQLServer2017之后也设计了DB缓存库,貌似用的人并不是很多,具体性能不好评判。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值