Странная проблема с кэшированием в ASP.NET MVC с использованием Linq - PullRequest
0 голосов
/ 08 сентября 2010

Используя asp.net MVC в c #, я выполняю вызов хранимой процедуры, используя Linq, в свою таблицу SQL Members. У меня нет внутреннего кэширования в приложении, я уже проверил, чтобы убедиться, что оно отключено.

Контрольный пример: У меня есть имя пользователя test1. С сайта я меняю имя пользователя на test2. Сайт по-прежнему показывает test1. Я иду в Management Studio и запускаю свою хранимую процедуру MemberByEmail, она показывает test2 правильно.

Я начинаю с простого, обновляю свою страницу, чтобы увидеть, не является ли это кешем браузера, все еще test1. Я перехожу к отладке, прохожу код и обнаруживаю, что он проходит правильно, чтобы вызвать базу данных:

/// <summary>Method that is mapped to the dbo.MemberByEmail database procedure.</summary>
    /// <returns></returns>
    [System.Data.Linq.Mapping.Function(Name="dbo.MemberByEmail")]
    public System.Data.Linq.ISingleResult<BookCrossing.Data.Member> MemberByEmail(
        [System.Data.Linq.Mapping.Parameter(DbType="nvarchar(100)")] string email)
    {
        var methodInfo = (System.Reflection.MethodInfo)System.Reflection.MethodInfo.GetCurrentMethod();
        var result = this.ExecuteMethodCall(this, methodInfo, email);

        return ((System.Data.Linq.ISingleResult<BookCrossing.Data.Member>)(result.ReturnValue));
    }

Я включил профилировщик для моей базы данных sql, и он фактически показывает запись для MemberByEmail, и возвращенный набор результатов имел имя пользователя = test1.

Снова я запустил хранимую процедуру через Management Studio, и она выбрала test2 в качестве имени пользователя. Я ждал 15 минут, обновляя веб-страницу каждые 5 или около того, и она так и не очистилась и подала правильный test2 из БД. Последний странный кусок, я запустил IISReset и обновил страницу, test2 был возвращен.

Полагаю, я просто упускаю из виду нечто очевидное. Любая помощь или совет будут великолепны. Спасибо

ОБНОВЛЕНИЕ: я создал консольное приложение, чтобы вынуть его из Интернета. Проблема та же, что и при доступе напрямую из консольного приложения, без изменений.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2010

Потребовалось время, но мы решили это.Доступ к данным осуществляется через MemberRepository в нашем проекте, и мы загрузили репозиторий членов в наш класс MembershipProvider.Проблема в том, что класс MembershipProvider был загружен в начале приложения и никогда не удалялся, поэтому все вызовы MemberRepository выполнялись в одном и том же контексте.Странная часть заключается в том, что вызов прошел весь путь до SQL (как было отмечено, мы смогли увидеть запрос в профилировщике), но недра кода вернули набор результатов, но вместо этого использовали набор результатов первого вызова и отправили его обратно.нам.

Таким образом, перемещая репозиторий в нужный метод или в наш MembershipProvider, он уничтожался после каждого вызова, и это решало проблему.Я не знаю, что это конкретно для нашей установки, но, надеюсь, это поможет кому-то в будущем.

0 голосов
/ 08 сентября 2010

Как вы называете это с веб-страницы? Если с помощью вызова Ajax, IE услужливо кеширует результат для вас ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...