#c# #.net #entity-framework #ado.net #linq-to-entities
#c# #.net #entity-framework #ado.net #linq-to-entities
Вопрос:
У меня есть приложение, которому необходимо хранить данные из базы данных в памяти. Существует 5-6 таблиц с очень небольшим количеством строк, и таблицы обновляются очень редко, и поскольку приложению очень часто нужны эти данные, я хотел бы избежать постоянного запроса к БД при каждом действии. Я использую Entity Framework 4 (linq для сущностей), и он отправляет запрос при каждом запросе. Я знаю, что этого можно избежать, используя ToList или около того… но мне нужна информация из этих 6 таблиц, и запросы применяют объединения.
Каким было бы лучшее решение.
Ответ №1:
Цель запроса — быть выполненным. Вы можете проверить оболочку кэширования EF, если это решит проблему, но я так не думаю. Поставщик кэширования кэширует фактический запрос, поэтому достаточно изменить условие where, и он рассматривается как другой запрос.
Это должно быть сделано путем загрузки ваших данных в пользовательские структуры данных (списки) и использования Linq-to-objects для них.
Ответ №2:
Если вы объединяете эти данные с другими данными, которые не являются кандидатами для кэширования, я бы посоветовал взглянуть на функции вашего ядра database engine. Большинство продвинутых баз данных SQL уже размещают эти таблицы в оперативной памяти. Вы уже будете испытывать накладные расходы на задержку в сети при выполнении запроса для некэшированных данных. И база данных уже будет иметь индекс в оперативной памяти. Если только вы не говорите о больших строках, подобных изображению или подобному. Вы бы просто переместили небольшой объем обработки из одного места в другое. Кроме того, чтобы быть таким же эффективным, как база данных SQL, вам нужно не только найти способ кэширования, но также кэшировать индекс и написать код для его использования и поддержки.
Тем не менее, в некоторых случаях использования это было бы очень полезно.