• 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();

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

  • 相关阅读:
    如何修改mysql root密码
    【STL】list基础(转)
    时间控制timer settimeout setinterval
    刷新ArrayCollection的显示控件
    需要科普的网站
    flex 拖拽数据
    常用的资源网站
    as3 性能优化
    对象池
    Bitmap与Bitmapdata
  • 原文地址:https://www.cnblogs.com/lxc89/p/5579900.html
Copyright © 2020-2023  润新知