Linq to Sql:更新之屬性遍歷法


最近在學習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();

測試,發現修改成功。這下再也不用寫一大堆屬性賦值了,不然真的會要人命啊!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM