Linq to Sql:更新之属性遍历法

Posted 冷香残

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();

测试,发现修改成功。这下再也不用写一大堆属性赋值了,不然真的会要人命啊!!!

 

以上是关于Linq to Sql:更新之属性遍历法的主要内容,如果未能解决你的问题,请参考以下文章

Linq to Sql-我可以构建一个通用的更新操作吗?

Linq to SQL 通过 BLL 问题更新 - 最佳实践

LINQ to SQL语句(13)之开放式并发控制和事务

Linq-To-Sql ORM 更新一对多

从 C# 保存到 SQL 中的 DATE 类型列 - Linq to SQL

如何使用 linq to sql 一次更新多行?