最近在學習Linq to Sql,於是自己做了一個例子。但是,當用到Linq to Sql來更新數據的時候,我傻眼了。 網上一搜索,全是這樣的。那我就想了,要是一個表有幾十個欄位,那不是要寫死人???於是乎我就開始想這個各種辦法偷懶: 結果報錯,不能用。然後看到說attach(entity)方法預設 ...
最近在學習Linq to Sql,於是自己做了一個例子。但是,當用到Linq to Sql來更新數據的時候,我傻眼了。
wwsDataContext db = new wwsDataContext(); Tb_UserInfor userinfor= db.Tb_UserInfor.First(u => u.ID == 1); userinfor.UserName= "Zhang Li"; db.submitchanges();
網上一搜索,全是這樣的。那我就想了,要是一個表有幾十個欄位,那不是要寫死人???
於是乎我就開始想這個各種辦法偷懶:
wwsDataContext db = new wwsDataContext(); db.Tb_UserInfor.attach(model); db.submitchanges();
結果報錯,不能用。然後看到說attach(entity)方法預設調用attach(entity, false),要使用attach(entity, true),於是改了,但可惜,還是報錯。
然後我就想,不就是先查詢出相應的實體類,然後給各個屬性賦值嘛。那我能不能遍歷屬性呢?
百度一下,在csdn論壇上看到有大神給出了這個代碼:
PropertyInfo[] pis = typeof(類名).GetProperties(); foreach (PropertyInfo pi in pis) { var value1 = pi.GetValue(對象名, null);//得到屬性的值 var attr=pi.Name.ToString()//得到屬性的名稱 }
然後,結合我現有情況,造就了下麵的代碼:
Tb_UserInfor sql = db.Tb_UserInfor.First(u => u.ID == model.ID); //獲取該類型所有屬性 PropertyInfo[] pis = typeof(Tb_UserInfor).GetProperties(); //依照屬性集合,遍歷實體類的值,並賦值給dataContext實例 foreach (PropertyInfo pi in pis) { var value = pi.GetValue(model, null);//得到屬性的值 pi.SetValue(sql, value, null);//給dataContext中的實例賦值 } db.SubmitChanges();
測試,發現修改成功。這下再也不用寫一大堆屬性賦值了,不然真的會要人命啊!!!