2011-01-14 278 views
0

我有一个web应用程序。它在小型桌面上执行TON数据读取和一些写操作。我想将整个数据表拖入缓存中,并查询缓存的数据。我重写上下文的表<T>()方法,以便我们可以缓存而不是实时数据。非常适合插入并支持单元测试数据访问。真棒。缓存Linq2Sql数据

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

我们拉的对象从数据库,把它变成一个列表<T>,把该列表中httpCache,然后删除数据上下文。

两个请求后,我们所说的重写表<T>,它得到的名单,和拉动对象了。我们改变它,然后需要附加缓存,然后更改对象到数据库上下文。所以我们称之为myContext.Attach(myObject的),并..... BOOM

的尝试已经取得了附加或 加入,是不是新的实体,也许 已经从另一个 DataContext的加载。这不支持。

有没有解决这个限制的办法吗?

回答

1

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

你提到缓存的实体“两个请求后”使用 - 如果这些请求都只有很短的时间跨度内发生,再破短生命周期的规则可能不会是一个问题。

另一种选择是那些基于实体,但那些实体,而当它的时间来更新与存储在缓存非实体对象的值的实体,查询上了一个新的DataContext干净实体缓存对象,更新这些实体并保存在新创建的DataContext上。

时候还有其他的方法来做到这一点 - 我发现这本书LINQ in Action是在处理这样的情况下非常有用。

+0

我把这个标记为答案,因为“LinqToSql不支持这个”*就是答案。 – 2011-01-18 16:13:52