代码之家  ›  专栏  ›  技术社区  ›  alex2k8

按ID获取缓存实体,而不调用db

  •  2
  • alex2k8  · 技术社区  · 15 年前

    我如何实现getitemfromcachebyid函数,这样它就可以将对象从LINQ获取到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 回复  |  直到 15 年前
        1
  •  1
  •   Dan Ling    15 年前

    它不能像您发布的那样工作的原因是因为LinqToSQL中有一个小错误。必须将lambda表达式放入单个方法本身中进行筛选,如下所示:

    item item=cxt.items.single(x=>x.id==1);

    根据这个站点,这个bug将在.NET 4.0中修复。 http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40 .

        2
  •  1
  •   bruno conde    15 年前

    您不应该依赖linq-to-sql的内部缓存。LinqtoSQL旨在从数据库中获取对象并将更改提交回数据库。它不打算成为中间层缓存组件,尽管在内部它确实具有某些缓存行为。 ( reference )

    在这种情况下,为什么需要缓存实体?是否需要实体的未更改版本?你关心表演吗?