如何忽略递归缓存数据以在数据库存储上完全获取它们

本文关键字:获取 存储 数据库 递归 何忽略 缓存 数据 | 更新日期: 2023-09-27 18:35:26

在我的DBMS上,我有两个具有一对多关系的表(A <- B)。在第一次运行时,我检索了一些 A(包括 B)的记录,如下所示:

var lst = from a in ctx.As.Include("Bs") select a;

所以,一切都很好。但是几分钟后,我想再次获得它们,因为它们可以在其他应用程序上更改。

我尝试使用

ctx.Refresh(RefreshMode.StoreWins, lst);

当我这样做时,唯一刷新的是来自 B 的对象,而不是 A。因此,我必须执行另一个步骤,例如:

foreach (var a in lst) {
    ctx.Refresh(RefreshMode.StoreWins, a.Bs);
}

如果我没有在 linq 语句中包含Bs也可以,然后使用Load方法而不是Refresh

这里的问题是调用RefreshLoad太多次可能会降低性能。如何在没有这么多调用的情况下从数据库存储中重新加载它们?

谢谢!

如何忽略递归缓存数据以在数据库存储上完全获取它们

但是几分钟后...

上下文是工作单元

,工作单元通常不需要几分钟,因此问题的基本答案是创建新上下文并再次执行查询。

如果你真的认为你的上下文必须存在这么长时间(我怀疑它必须存在,因为在这种情况下你不想覆盖本地更改),你可以试试这个:

ctx.As.MergeOption = MergeOption.OverwriteChanges;
ctx.Bs.MergeOption = MergeOption.OverwriteChanges;
var lst = from a in ctx.As.Include("Bs") select a;