缓存Linq2Sql数据

时间:2011-01-14 20:25:16

标签: linq-to-sql caching

我有一个网络应用程序。它对小表和一些写操作执行TON数据读取。我想将整个数据表拉入缓存,并查询缓存的数据。我覆盖了上下文的表<T>()方法,因此我们可以提供缓存而不是实时数据。适用于插入,也支持单元测试数据访问。真棒。

因此我们开始使用缓存数据并发现更新和删除不起作用。

我们从db中提取一个对象,将其抛入List <T>,将该列表放入httpCache中,然后删除数据上下文。

稍后两个请求,我们调用重写的表<T>,它获取列表,并将对象拉出。我们更改它然后需要将缓存的,然后更改的对象附加到db上下文。所以我们调用myContext.Attach(myobject)和..... BOOM

  

已尝试附加或   或许,添加一个非新的实体   从另一个装载   DataContext的。这不受支持。

有没有解决这个限制的方法?

1 个答案:

答案 0 :(得分:1)

听起来您的缓存实体仍然附加到原始DataContext ,以便查询它们。解决此问题的一种方法(打破了保持DataContext生命周期简短的最佳实践规则)是将DataContext与实体一起缓存,然后在要删除或更新缓存实体时使用该缓存上下文。

你提到缓存的实体被用于“两个请求之后” - 如果这些请求都在短时间内发生,那么打破短生命周期规则可能不是问题。

另一种选择是缓存基于实体但实体的对象,以及何时更新具有存储在缓存非实体中的值的实体对象,在新的DataContext上查询干净的实体,更新这些实体,然后保存在新创建的DataContext上。

还有其他方法可以做到 - 我发现这本书LINQ in Action非常有助于处理这类案件。