如何实现GetItemFromCacheById函数,以便从linq-to-sql缓存中获取对象,而不是调用数据库。
using (var cxt = new DbDataContext())
{
// Read item into the cache
Item item = cxt.Items.Where(x => x.Id == 1).Single();
//...
item = GetItemFromCacheById(cxt, 1);
}
答案 0 :(得分:1)
您不应该依赖LINQ to SQL的内部缓存。 LINQ to SQL旨在从数据库中获取对象并将更改提交回数据库。它不是一个中间层缓存组件,但在内部,它确实具有某些缓存行为。 (reference)
在这种情况下,为什么需要缓存实体?您是否需要一个未更改的实体版本?你关心表现吗?
答案 1 :(得分:1)
它之所以不能正常发布是因为linq to sql中存在一个小错误。您必须将lambda表达式放在Single方法本身内部,如下所示:
Item item = cxt.Items.Single(x => x.Id == 1);
根据此网站,该错误将在.net 4.0 http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40中修复。