在c#中使用asp.net MVC,我正在使用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 db的探查器,它实际上显示了MemberByEmail的一个条目,并且返回的结果集有username = test1。
我再次通过Management Studio运行存储过程,并将test2作为用户名。我等了15分钟,每隔5个左右刷新一次网页,它从未清除并从数据库中提供正确的test2。最后一个奇怪的部分,我运行了IISReset并刷新了页面,返回了test2。
我猜这是我只是忽略了一些明显的东西。任何帮助或建议都会很棒。感谢
更新:我创建了一个控制台应用程序来取出它的网页。直接从控制台应用程序访问时问题也是一样,没有变化。
答案 0 :(得分:0)
你是如何从网页上调用的?如果通过Ajax调用,IE可以帮助您缓存结果......
答案 1 :(得分:0)
花了一段时间但我们解决了这个问题。数据访问是通过我们项目中的MemberRepository完成的,我们在MembershipProvider类中加载了成员存储库。问题是MembershipProvider类在应用程序的开头加载并且从未被删除,因此所有MemberRepository调用都是通过相同的上下文完成的。奇怪的是,调用一直到SQL(如前所述,我们能够在profiler中看到请求),但是代码的大部分返回了结果集,而是使用了第一个调用结果集并将其发回给我们
因此,通过将存储库移动到所需的方法或我们的MembershipProvider,它在每次调用后被销毁并解决了问题。我不知道这是我们设置的具体内容,但希望将来可以帮助某人。