奇怪的缓存问题与ASP.net/Linq(Weird caching issue with ASP.

2019-10-17 15:46发布

我正在写涉及存储配置文件的应用程序。 我使用LINQ访问数据库,但保存配置文件时,有一个奇怪的问题。 当我保存它,将它写入到数据库正确的 - 但是当我离开这个页面并回来,老值仍然型材形式。

我的个人资料页:

if(!Page.IsPostBack) {
    Profile p = Student.GetProfile(Int32.Parse(Session["userID"].ToString()));
    if (p != null)
    {
          FirstNameTextBox.Text = p.FirstName;
          LastNameTextBox.Text = p.LastName;
          Address1TextBox.Text = p.Address1;
          .....
    }

而我的学生类:

    public static Profile GetProfile(int uID)
    {
        var profile = (from p in db.Profiles
                       where p.uID == uID
                       select p).FirstOrDefault();
        return profile;
    }

我没有做任何花哨的缓存在任何地方,所以不知道在哪里旧值存储...

**编辑**

因此,它似乎是下降到一个全球性的LinqDataContext。 在我的学生上课,我有:

public class Student
{
    private static LinqClassesDataContext db = new LinqClassesDataContext() { CommandTimeout = 36000 };

    public static Profile GetProfile(int uID)
    {
            var profile = (from p in db.Profiles
                           where p.uID == uID
                           select p).FirstOrDefault();
            return profile;   
    }

如果我给GetProfile方法它自己的DataContext,问题就迎刃而解了。

仍然很新的LINQ的,什么是有与使用的数据库相同的访问许多方法的类的最佳方式? 有了这样的全球背景下? 或每个方法使用它自己的数据上下文?

Answer 1:

假设你存储的userIDSession["userID"]的地方,而不是将其清除出当你保存,这可能是这里的“缓存”的发生。 Session (如果在内存中的会话启用或服务器进程的寿命)的对象将生活(大致)为浏览器会话的生命。



Answer 2:

我想即使LINQ查询发送给它使用存储在你有,如果你希望新的数值来清除高速缓存中的cache.so旧值的数据库。



Answer 3:

你打算在你添加的注释我的猜测是,你所得到的页面是由浏览器/ HTTP服务器缓存。 如果网址相同先前请求的页面一些默认设置会告诉浏览器/服务器使用缓存的HTML。 为了避免这种情况,并得到新的HTML的每一个请求,你可以试试你的HTML的head标签中添加元标记。

<meta http-equiv="Pragma" CONTENT="no-cache">


Answer 4:

它结束了被我用在DataContext。 我不知道是什么原因这个固定的问题,但我改变了我的类从:

public class Student
{
   private static LinqClassesDataContext db = new LinqClassesDataContext() { CommandTimeout = 36000 };

   public static Profile GetProfile(int uID)
   {
        var profile = (from p in db.Profiles
                       where p.uID == uID
                       select p).FirstOrDefault();
        return profile;   
   }
}

至:

public class Student
{
   public static Profile GetProfile(int uID)
   {     
        LinqClassesDataContext db = new LinqClassesDataContext();
        var profile = (from p in db.Profiles
                       where p.uID == uID
                       select p).FirstOrDefault();
        return profile;   
   }
}


文章来源: Weird caching issue with ASP.net/Linq