Linq to sql 缓存Linq2Sql数据

Linq to sql 缓存Linq2Sql数据,linq-to-sql,caching,Linq To Sql,Caching,我有一个web应用程序。它在小表上执行大量数据读取和少量写入。我想将整个数据表拉入缓存,并查询缓存的数据。我重写了上下文的Table()方法,这样我们就可以提供缓存而不是实时数据。非常适合插入,并支持单元测试数据访问。太棒了 所以我们开始使用缓存数据,发现更新和删除不起作用 我们从db中提取一个对象,将其放入列表,将该列表放入httpCache,然后删除数据上下文 两个请求之后,我们调用覆盖的表,它获取列表,并拉出对象。我们更改它,然后需要将缓存的、然后更改的对象附加到db上下文。所以我们称之为

我有一个web应用程序。它在小表上执行大量数据读取和少量写入。我想将整个数据表拉入缓存,并查询缓存的数据。我重写了上下文的Table
()方法,这样我们就可以提供缓存而不是实时数据。非常适合插入,并支持单元测试数据访问。太棒了

所以我们开始使用缓存数据,发现更新和删除不起作用

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

两个请求之后,我们调用覆盖的表
,它获取列表,并拉出对象。我们更改它,然后需要将缓存的、然后更改的对象附加到db上下文。所以我们称之为myContext.Attach(myobject)和…..BOOM

已尝试连接或删除 添加一个可能不是新的实体 从另一个地方装载的 数据上下文。这是不受支持的


有办法绕过这个限制吗

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

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

另一个选项是缓存基于实体但不是实体的对象,当需要使用缓存的非实体对象中存储的值更新实体时,在新的DataContext上查询干净的实体,更新这些实体,然后保存在新创建的DataContext上


还有其他方法可以做到这一点——我发现这本书对处理此类案例非常有帮助。

我将此标记为答案,因为“LinqToSql不支持此”是答案。