解决EFCore缓存机制导致的数据查询错误问题
2024-09-03 17:01:03
如题,在对同一个Context连续进行相同条件的查询时,会触发EFCore的缓存机制,如果这个过程中数据发生了变化,则会出现错误。
例如:有两个Context实例,一个负责查询,一个负责增删改, A_Context查询了数据A,而B_Context之后修改了数据A,当A_Context再次以相同条件查询数据A时,由于缓存的影响,将继续查询到未修改的结果。
因此,可以通过清除指定数据的缓存的方法解决(也可以全局禁用缓存、或禁用某个实体的缓存), 常见的是AsNoTracking()方法, 但由于使用的是Dynamic.Linq的写法,因此无法直接使用。
public static dynamic GetDataByPrimaryValue(string ModelType, string PrimaryValue)
{
Type modelType = PublicHelper.CreateInstanceByClassName(ModelType).GetType();
var context = DBContextHelper.GetContextByModelType(modelType); var result = context
.Query(modelType)
.Where($"{ DBContextHelper.GetModelPrimaryKey(modelType)}==@0", PrimaryValue)
.SingleOrDefault();
context.Entry(result).State = EntityState.Detached;//从缓存中去掉数据
return result;
}
也就是要在查询结束后,从缓存中去掉这次查询的数据即可。
最新文章
- Linux 设备驱动程序 proc seq
- Linux gcc的安装
- CentOS 多网卡绑定bonding
- INV(库存管理)
- 找个输入IPoint在某个FeatureClass上距离最近的要素
- bzoj 3784: 树上的路径 堆维护第k大
- Linux下一些基本操作
- 「OC」内存管理
- [转载+实践理解]Android动画---如何正确使用平移动画(关于fillBefore和fillAfter的一点说明)(转载)
- HBase数据库增删改查常用命令操作
- k-近邻算法概述
- missing 1 required positional argument: 'on_delete'报错解决方案
- Oracle数据库学习(一)安装和简单使用
- python format格式化字符串
- centos实现两种秒级任务的简单方法
- [python]文件操作read&;readline&;readlines
- linux系统下安装nginx
- plot绘图
- ElasticStack系列之八 &; _source 字段
- word 使用中 上标符号的实现