使用LINQ仅更新表中修改列的方法

时间:2011-09-21 05:14:21

标签: linq-to-sql

我在表单上有20个字段,如何更新用户在运行时修改的字段以及如何检查哪些字段已更改,以便我只能使用LINQ更新表中的值。我正在使用C#和VS2010

处理Windows应用程序

请参考代码(目前我正在传递所有值,我知道这不是正确的方法)

    private void UpdateRecord(string groupBoxname)
        {
            using (SNTdbEntities1 context = new SNTdbEntities1())
            {
                {
                    Vendor_Account va = new Vendor_Account();                    

                    var Result = from grd in context.Vendor_Account
                                 where grd.Bill_No == dd_billNo.Text
                                 select grd;

                    if (Result.Count() > 0)

                        if ((dd_EditProjectName.Text!= "Select") && (dd_billNo.Text!="Select") && (dd_editVendorName.Text!="Select"))
                        {
                            foreach (var item in Result)
                            {
                                va.Account_ID = item.Account_ID;
                            }
                            va.Amount_After_Retention = Convert.ToDecimal(txt_AD_AfterRet.Text);
                            va.Balance = Convert.ToDecimal(txt_AD_Balance.Text);
                            va.Bill_Amount = Convert.ToDecimal(txt_AD_BillAmount.Text);
                            va.Bill_Date = Convert.ToDateTime(dt_AD_BillDate.Text);
                            va.Bill_No = dd_billNo.Text;
                            va.Comments = txt_AD_Comments.Text;
                            va.Paid_Till_Date = string.IsNullOrEmpty(txt_AD_Paid.Text)?0:Convert.ToDecimal(txt_AD_Paid.Text);
                            va.Project_Name = dd_EditProjectName.Text;
                            va.Retention_Perc = Convert.ToDecimal(txt_retPerc.Text);
                            va.Amount_After_Retention = Convert.ToDecimal(txt_AD_AfterRet.Text);
                            va.Vendor_Name = dd_editVendorName.Text;
                            va.Vendor_Code = txt_AD_Code.Text;

                            context.Vendor_Account.ApplyCurrentValues(va);
                            //context.Vendor_PersonalInfo.AddObject(vpi);
                            context.SaveChanges();
                            MessageBox.Show("Information Updated Sucessfully!");
                            lbl_Warning.Text = "";
                            entityDataSource1.Refresh();
                        }

                        else
                        {
                            MessageBox.Show("Vendor Name,Project Name and Bill No cannot be blank!!");
                        }               

                }               

            }
        }

2 个答案:

答案 0 :(得分:2)

实体框架将完成该任务。 由于您没有提供任何代码,我无法确切地说明答案,但请检查这些链接:

http://msdn.microsoft.com/en-us/library/aa697427(v=vs.80).aspx,部分:操纵数据和持久变更

http://www.codeproject.com/KB/database/sample_entity_framework.aspx

请注意, SaveChanges()函数将更新对EF中的记录所做的任何修改。

答案 1 :(得分:-1)

创建一些字段重复项,并将表单元素中的值与本地副本进行比较,如果它已更改而不是更新它。