我试图弄清楚如何使用存储库模式关闭DbContext的缓存。现在我的视图和CRUD函数使用相同的上下文,因此在DbSet上放置.AsNoTracking()是行不通的,因为更新数据不像以前那样发生。
_context.Entry(e).State = e.Id == 0 ? EntityState.Added : EntityState.Modified;
_context.SaveChanges();
有人可以在EntityFramework中解释缓存,这样我就可以提供动态功能,如果用户更新记录然后点击链接查看其他数据,那么新网格上显示的数据会从以前的控制器动作...希望从那以后。
查看订单 - >更新订单 - >保存订单 - >查看用户 - >视图正确显示基于订单更改的项目计数聚合。
答案 0 :(得分:1)
你问的问题并不容易。 你会做什么取决于你正在使用什么类型的实体 您可能知道有几个通用选项 - EF实体,自我跟踪实体,POCO无代理,带代理的POCO 取决于你有什么你会
1)重新挂接实体,在实体的导航属性上调用Load
2)重新附加实体,在上下文中调用LoadProperty
3)如果上下文保持不变,只需调用Load / LoadProperty
您实际上称为缓存的是实体跟踪,因此您可以在MergeOption
MergeOption.NoTracking
设置为ObjectQuery
。