Получить кэшированную сущность по идентификатору без вызова БД - PullRequest
2 голосов
/ 15 сентября 2009

Как я могу реализовать функцию 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 ]

1 голос
/ 15 сентября 2009

Причина, по которой вы не работали, когда вы писали, заключается в небольшой ошибке в linq to sql. Вы должны поместить свое лямбда-выражение для фильтрации внутри самого метода Single, например:

Элемент 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.

1 голос
/ 15 сентября 2009

Вы не должны полагаться на LINQ для внутреннего кэша SQL. LINQ to SQL был разработан для получения объектов из базы данных и отправки изменений обратно в базу данных. Он не предназначен, чтобы быть компонентом кэширования среднего уровня, хотя внутренне он имеет определенные поведения кэша. ( ссылка )

Зачем вам кэшированные объекты в этом случае? Вам нужна неизменная версия сущности? Вы обеспокоены производительностью?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...