Уточнение, что именно кэширует EF Plus

Если у меня есть таблица запросов на обслуживание, и я запускаю на ней следующий код:

var serviceRequest = await _ctx.ServiceRequests.DeferredAny(t => t.Id == h.Id).FromCacheAsync("ServiceRequestByID");

Это было бы то же самое, что сказать сохранить этот запрос:

ВЫБЕРИТЕ * ИЗ ServiceRequests, ГДЕ ID = 12345

или это то же самое, что сказать:

SELECT * FROM ServicesRequests (затем из этих недавно кэшированных данных найдите идентификатор 12345).

Другими словами, что именно кэшируется в отношении использования приведенной выше строки кода? И если я вернусь позже с новым идентификатором, будет ли он запрашивать кеш или обращаться к базе данных, потому что в первый раз он сохранил только запись первого идентификатора?


person BinaryNexus    schedule 30.04.2018    source источник


Ответы (1)


Результат кэшируется.

В вашем случае результат логического значения кэшируется, а не сущность.

Если вы сделаете запрос с другим идентификатором, он запросит базу данных и кэширует результат вместе с другим результатом.

person Jonathan Magnan    schedule 01.05.2018
comment
Дополнительный вопрос, связанный... Если у меня есть небольшой модуль в моем приложении, который может запрашивать несколько связанных таблиц, было бы разумнее просто получить для них тег {moduleName}, а затем, когда запись обновляется, просто истечет срок действия всех запросов с этим тегом? Или есть лучший способ? - person BinaryNexus; 03.05.2018
comment
Вы можете указать более одного тега, поэтому ответ сильно зависит от того, как вы его используете. Например, если у вас есть импорт, в котором указаны и страна, и штат, то наличие тега для обоих кешей может упростить их истечение. Ответ будет варьироваться в зависимости от того, как вы хотите использовать кеш, мне не нужны какие-либо общие рекомендации по этому вопросу. - person Jonathan Magnan; 04.05.2018