none
Master-Detail維護後做一次性SubmitChanges? RRS feed

  • 問題

  • 請問我實作一個Master-Detail網頁可否在User維護完後最後按下Save按鈕做LINQ to SQL的SubmitChanges()?
    2011年2月16日 上午 02:20

解答

  • 因為在Web應用程式,每次頁面往返(Postback),都是一個新的個體.

    也就是
    private NorthwindDataContext db = new NorthwindDataContext();
    實際上只要有Postback動作就會重新執行一次.

    所以你的NewProduct_Click與Button1_Click的db變數實際上不是同一個.

    很不幸的因為Web本身的特性導致這個在Winform很簡單的需求會變得很難處理.這是Web的優點也是缺點.
    所以你必須在NewProduct_Click時將你的Product記錄於Session或其他儲存媒體中.然後於Button1_Click取回再做新增動作.

     

    • 已標示為解答 Tony_Huang 2011年2月16日 上午 05:06
    2011年2月16日 上午 03:05

所有回覆

  • 當然可以
    2011年2月16日 上午 02:49
  • namespace linq_part4_cs
    {
      public partial class _Default : System.Web.UI.Page
      {
        private NorthwindDataContext db = new NorthwindDataContext();
    
        protected void NewProduct_Click(object sender, EventArgs e)
        {
          Product p = new Product();
          p.ProductName = "delete me";
          p.UnitPrice = 4.30m;
          TransactionScope ts = new TransactionScope();
          db.Products.InsertOnSubmit(p);
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
          db.SubmitChanges();
        }
      }
    }
    可是我試的結果User按下Button1(Save)後並不會存入資料庫?
    
    2011年2月16日 上午 02:57
  • 因為在Web應用程式,每次頁面往返(Postback),都是一個新的個體.

    也就是
    private NorthwindDataContext db = new NorthwindDataContext();
    實際上只要有Postback動作就會重新執行一次.

    所以你的NewProduct_Click與Button1_Click的db變數實際上不是同一個.

    很不幸的因為Web本身的特性導致這個在Winform很簡單的需求會變得很難處理.這是Web的優點也是缺點.
    所以你必須在NewProduct_Click時將你的Product記錄於Session或其他儲存媒體中.然後於Button1_Click取回再做新增動作.

     

    • 已標示為解答 Tony_Huang 2011年2月16日 上午 05:06
    2011年2月16日 上午 03:05
  • 非常感謝!
    2011年2月16日 上午 05:06