gpt4 book ai didi

c# - 如何清除 Linq to Sql 上的 DataContext 缓存

转载 作者:可可西里 更新时间:2023-11-01 08:05:41 24 4
gpt4 key购买 nike

我正在使用 Linq to Sql 查询某些数据库,我只使用 Linq 从数据库中读取数据,并通过其他方式对其进行更改。 (这是无法更改的,这是我们正在扩展的应用程序的限制,所有更新都必须通过其 sdk)。

这很好,但是我遇到了一些缓存问题,基本上,我使用 Linq 查询一行,然后通过外部方式删除它,然后如果我再次使用 linq i 查询该行,我会在外部创建一个新行得到了旧的(缓存的)数据。

我无法关闭对象跟踪,因为这似乎会阻止数据上下文自动加载相关属性(外键)。

有什么方法可以清除 DataContex 缓存吗?

我在网上找到了一个方法,但它似乎不安全:http://blog.robustsoftware.co.uk/2008/11/clearing-cache-of-linq-to-sql.html

你怎么看?我有什么选择?

最佳答案

如果要刷新特定对象,则Refresh() method可能是您最好的选择。

像这样:

Context.Refresh(RefreshMode.OverwriteCurrentValues, objectToRefresh);

如果您需要一次刷新多个对象,您还可以传递一个对象数组或一个 IEnumerable 作为第二个参数。

更新

我在评论中看到你在谈论什么,在反射器中你看到这发生在 .Refresh() 中:

object objectByKey = context.Services.GetObjectByKey(trackedObject.Type, keyValues);
if (objectByKey == null)
{
throw Error.RefreshOfDeletedObject();
}

您链接的方法似乎是您的最佳选择,DataContext 类不提供任何其他方法来清除已删除的行。处置检查等都在 ClearCache() 方法中...它实际上只是检查处置并在 CommonDataServices 上调用 ResetServices()下面..唯一的不良影响是清除您已排队的任何待处理插入、更新或删除。

还有一个选项,无论你在做什么操作,你能启动另一个 DataContext 吗?它不会有任何缓存......但这确实涉及一些计算成本,所以如果挂起的插入、更新和删除不是问题,我会坚持使用 ClearCache() 方法。

关于c# - 如何清除 Linq to Sql 上的 DataContext 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2098143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com