当前位置: 首页 > 编程语言 > C#

如何清除LinqtoSql上的DataContext缓存分享

时间:2023-04-10 14:39:32 C#

如何清除LinqtoSql上的DataContext缓存我正在使用LinqtoSql查询数据库,我只使用Linq从数据库中读取数据,并通过其他方式改变它。(这是无法更改的,这是我们正在扩展的应用程序的限制,所有更新都必须通过其sdk)。这工作正常,但我有一些缓存问题,基本上,我使用Linq查询一行,然后我在外部删除它,然后我在外部创建一个新行如果我再次使用linq查询该行我得到旧的(缓存)数据。我无法关闭对象跟踪,因为这似乎会阻止数据上下文自动加载相关属性(外键)。有没有办法清除DataContex缓存?我找到了一种方法,但它似乎并不安全:http://blog.robustsoftware.co.uk/2008/11/clearing-cache-of-linq-to-sql.html你怎么看?我有哪些选择?如果要刷新特定对象,Refresh()方法可能是最好的选择。像这样:Context.Refresh(RefreshMode.OverwriteCurrentValues,objectToRefresh);如果需要一次刷新多个对象,还可以传递一个对象数组或一个IEnumerable作为第二个参数。更新我看到你在评论中说的话,在反射器中你看到这发生在里面。Refresh():objectobjectByKey=context.Services.GetObjectByKey(trackedObject.Type,keyValues);如果(objectByKey==null){throwError.RefreshOfDeletedObject();您链接的方法似乎是您的最佳选择,DataContext类不提供任何其他方法来清除已删除的行。处理检查等都在ClearCache()方法中……它实际上只是检查处理并在基础CommonDataServices上调用ResetServices()。CommonDataServices的唯一不良影响是清除您排队的任何待处理的插入、更新或删除。还有一个选择,你可以为你正在做的任何操作启动另一个DataContext吗?它不会有任何缓存......但它确实涉及一些计算成本,所以如果挂起的插入、更新和删除不是问题,我会坚持使用ClearCache()方法。我制作这段代码是为了实际清除“缓存”实体,将其分离。varentidades=Ctx.ObjectStateManager.GetObjectStateEntries(EntityState.Added|EntityState.Deleted|EntityState.Modified|EntityState.Unchanged);foreach(varobjectStateEntryinentidades)Ctx.Detach(objectStateEntry.Entity);Ctx是我的上下文。您应该能够使用此对象重新查询结果集。这不会拉取缓存集,但实际上会返回最终结果。我知道这可能不是那么简单或可行,具体取决于您设置应用程序的方式……HTH。以上就是C#学习教程:如何清除LinqtoSql上的DataContext缓存分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: