1

プロファイルの保存を含むアプリケーションを作成しています。Linqを使用してデータベースにアクセスしていますが、プロファイルを保存するときに奇妙な問題が発生します。保存すると、DBに正しく書き込まれますが、ページを離れて戻っても、古い値はプロファイル形式のままです。

私のプロフィールページ:

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はまだ非常に新しいのですが、データベースへの同じアクセスを使用する多数のメソッドを持つクラスを作成するための最良の方法は何ですか?このようなグローバルコンテキストをお持ちですか?または、独自のデータコンテキストを使用する各メソッド?

4

4 に答える 4

0

linqがクエリをデータベースに送信しても、キャッシュに保存されている古い値が使用されると思います。新しい値が必要な場合は、キャッシュをクリアする必要があります。

于 2013-01-28T15:11:54.740 に答える
0

userIDSession["userID"]どこかに保存していて、保存時にクリアしない と仮定すると、ここで「キャッシュ」が発生する可能性があります。Sessionオブジェクトは、ブラウザー セッションの存続期間中 (またはインメモリ セッションが有効な場合はサーバー プロセスの存続期間中) (大まかに) 存続します。

于 2013-01-28T15:10:15.467 に答える
0

追加されたコメントを続けると、取得しているページはブラウザー/http サーバーによってキャッシュされていると思います。URL が以前に要求されたページと同じである場合、いくつかのデフォルト設定により、ブラウザー/サーバーはキャッシュ html を使用するように指示されます。これを回避し、リクエストごとに新しい html を取得するには、html の head タグ内にメタ タグを追加してみてください。

<meta http-equiv="Pragma" CONTENT="no-cache">
于 2013-01-28T15:27:17.010 に答える
0

結局、私が使用していた 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;   
   }
}
于 2013-01-29T18:13:14.553 に答える