通过ID获取缓存实体,而无需调用db

时间:2009-09-15 10:08:09

标签: linq-to-sql caching

如何实现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);
}

2 个答案:

答案 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中修复。