Я использую настраиваемый поставщик ролей, который для упрощения получает объект человека из базы данных с помощью EF в проекте .net 4 MVC и распределяет роли пользователей на основе некоторых правил вокруг этого (и других запросов).
Данные меняются регулярно, хотя изменения осуществляются через код в другом месте системы, а не через поставщика ролей. Поставщик ролей является односторонним и просто получает роли, в которых находится пользователь.
Когда я меняю значения базы данных, диспетчер ролей не отслеживает смену ролей, пока я не перекомпилирую (например, добавив пробел в веб-конфигурацию) или пока приложение не перезапустится.
Я обеспечил, чтобы роли не кешировались в cookie, установив cacheRolesInCookie=false
, на что, по-видимому, указывает большая часть справки, и предполагаю, что в диспетчер ролей встроен кеш сеанса.
Я изменил запрос EF, который возвращает объект человека, чтобы включить отметку времени как часть запроса. Я могу видеть через профилировщик, что запрос действительно вызывается, и метка времени меняется каждый раз, но мой сеанс отладки показывает устаревшие данные из предыдущего состояния для элемента «человек». Есть и другие части сайта, которые отображают данные из таблицы Person, которые показывают актуальное состояние.
Я действительно не понимаю, как отладчик должен вести себя с кешированными данными. Я не понимаю, почему запрос EF вообще срабатывает, если это проблема с кешем, но данные о человеке определенно показывают состояние в соответствии с первым запуском, а не в соответствии с текущим состоянием строки таблицы.
Я чувствую, что упускаю что-то очевидное. Кэширует ли диспетчер ролей данные в сеансе?