Я не удовлетворен ответами на Кэширование SQL-запросов .
Меня не интересуют сторонние решения, потому что это должна быть простая проблема, которую я сам решу.
Я ищу альтернативное решение Кэширование запросов Linq , которое работает с любым запросом SQL, а не только с Linq.Идеальным решением было бы иметь хранимую процедуру, такую как execsql @ Sql, @ HashCode, которая будет запрашивать таблицу сериализованных результатов с помощью HashCode и возвращать результат, если он существует, в противном случае выполнить запрос, сохранить сериализованный результат в таблице результатов и вернуть его.Конечно, возвращаемые результаты должны иметь такую же структуру, как если бы они не были сохранены.
Давайте не будем беспокоиться об истечении срока действия кэша / очистке мусора или других возможных проблемах производительности в этом контексте.
Для того, чтобы сделатьчто мне нужно иметь возможность обнаруживать хеш-код SQL-запроса (я полагаю, GetHashCode
в строке SQL-запроса подойдет), сериализовать и десериализовать результат запроса.
Учитывая, что результаты запроса могут иметь различную структуру, я полагаюэто использование FOR XML AUTO
было бы хорошим кандидатом для сериализации.Но как десериализовать его универсальным способом, чтобы код не зависел от структуры результата?
При необходимости решение может использовать функции Sql 2008.