none
使用linq to entity做CRUD時,如何取消修改? RRS feed

  • 問題

  • 請教各位前輩,如何使用linq to entity做CRUD(取消修改).

    我的想法是先用linq陳述式抓資料塞進ProductsBindingSource.

    再將ProductsBindingSource指定給productsDataGridView.DataSource.

    然後,使用BindingSource做CRUD和取消變更.

    確定要變更才用DbContext.SaveChanges()存進資料庫.

    問題是

    只有修改會成功,新增刪除都不會寫進資料庫.

    如果,直接使用DbContext又沒辦法取消變更.

    請教前輩,這個問題該如何處理呢?

    我的程式碼,如下

            private void frmProducts_Load(object sender, EventArgs e)//讀資料
            {
                var q = from p in DBEntities.Products select p;
                ProductsBindingSource.DataSource = q.ToList();
                this.productsDataGridView.DataSource = ProductsBindingSource;
            }
            public void btnAddNew_Click(object sender, EventArgs e)//新增
            {
                try
                { ProductsBindingSource.AddNew(); }
                catch (Exception ex)
                { MessageBox.Show(ex.Message); }
                this.productsDataGridView.Refresh();
            }

            public void btnDelete_Click(object sender, EventArgs e)//刪除
            {
                try
                {ProductsBindingSource.RemoveCurrent(); }
                catch (Exception ex)
                { MessageBox.Show(ex.Message); }
                this.productsDataGridView.Refresh();
            }

            public override void btnCancelEdit_Click(object sender, EventArgs e)//取消
            {
                ProductsBindingSource.CancelEdit();
                ResetProductsData();
            }

            public override void btnSaveChange_Click(object sender, EventArgs e)//儲存
            {
                ProductsBindingSource.EndEdit();
                this.DBEntities.SaveChanges();
                var q = from p in DBEntities.Products select p;
                ProductsBindingSource.DataSource = q.ToList();
                this.productsDataGridView.DataSource = ProductsBindingSource;
                this.productsDataGridView.Refresh();
            }


    2015年2月16日 上午 07:18

解答