0

在我的 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);
}

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

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

谢谢!

4

1 回答 1

1

但几分钟后...

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

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

ctx.As.MergeOption = MergeOption.OverwriteChanges;
ctx.Bs.MergeOption = MergeOption.OverwriteChanges;
var lst = from a in ctx.As.Include("Bs") select a;
于 2012-05-28T10:00:02.000 回答