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