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

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

时间: 2024-10-13 14:40:34

Linq to Sql:更新之属性遍历法的相关文章

linq to sql 和 entity framework 输出sql语句

linq to sql: dbcontext.Log 属性,是一个textwriter entity framework: 1 dbcontext.Database.Log, 是一个Action<string>, eg. console.write(string) 2 after 6.1, 也可以设置 interceptor

20150222&mdash;LINQ to SQL 插入、更新和删除

注意,使用LINQ to SQL时, 表中必须有一个主键才可以起效,否则系统将无法对数据作出修改 插入新数据,根据上一片的文章实例在其中添加新的控件: 编号TextBox(Name):sno 名字TextBox(Name):sname 性别TextBox(Name):ssex 生日DateTimePicker(Name):bir 班级TextBox(Name):sclass 以及 添加按钮 下面是添加按钮中的代码: private void tianjia_Click(object sender

LINQ To SQL在N层应用程序中的CUD操作、批量删除、批量更新

原文:LINQ To SQL在N层应用程序中的CUD操作.批量删除.批量更新 0. 说明 Linq to Sql,以下简称L2S.    以下文中所指的两层和三层结构,分别如下图所示: 准确的说,这里的分层并不是特别明确:(1) 生成的DataContext(Linq t0 SQL Runtime)和Entity是放在一个文件中的,物理上不能切割开来:上图只是展示逻辑上的结构.(2) 拿上图右边的三层结构来说,鉴于第(1)点,UI层就可以跨越BusinessLogic层,直接访问L2S层,这可能

LINQ To SQL 语法及实例大全

LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形式.关系条件形式.First()形式.下面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c

LINQ to SQL语句入门篇 纯属转载

Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形式.关系条件形式.First()形式.下面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c; 再如:筛选1994 年或之后雇用的雇员:

LINQ之路10:LINQ to SQL 和 Entity Framework(下)

在本篇中,我们将接着上一篇“LINQ to SQL 和 Entity Framework(上)”的内容,继续使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术的关键特性.我们在此关注的是LINQ to SQL和Entity Framework中的”LINQ”部分,并会比较这两种技术的相同和不同之处.通过我们之前介绍的LINQ知识还有将来会讨论的更多LINQ Operators,相信阅者能针对LINQ to SQL和Entity Framework写出优雅

LINQ之路 9:LINQ to SQL 和 Entity Framework(上)

在上一篇中,我们从理论和概念上详细的了解了LINQ的第二种架构“解释查询”.在这接下来的二个篇章中,我们将使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术的关键特性.在本系列文章中,我不准备事无巨细的讨论LINQ to SQL和Entity Framework的方方面面,毕竟那样需要太多的篇幅,也会让我们从LINQ上面转移注意力,况且,园子里也有不少介绍LINQ to SQL和Entity Framework的好文章.我们在此关注的是LINQ to S

简单测试linq to sql性能

前些日子,做了一个物业收费系统,cs模式,用到了linq to sql 技术,这是我第一次使用这个东东写程序存取数据库,迷迷糊糊搞得一塌糊涂,当时有个同学他们找好的分页组件,然后写好了调用方法,由于时间比较急,而且第一次用,所以没有怎么研究就直接按照注释使用他们写好的分页方法,然而开发过程中一直都对他们写的方法有怀疑,会不会是一种投机取巧,胡编乱造的?后来我也做过一些简单分析,我发现程序在业务逻辑层中每次都从数据库中将数据全部读取出来,然后循环将数据转成特定的List,也就是遍历整个数据集合,然

《深入了解 Linq to SQL》之对象的标识 —— 麦叔叔呕心呖血之作

序言 很多朋友都向我提过,希望我写一下关于Linq to SQL 或者 VS 插件方面的文章.尽管市面上有很多 Linq to SQL 的书籍,但是都是介绍怎么用,缺乏深度.关于 VS 插件方面的书籍也是很显浅,按书籍做出来的东西,只能是学生级别的东西,根本拿不出手.他们觉得我有这个能力写好. 从技术能力的角度来说,的确是不存在什么问题,但是,要把一门技术讲精讲透,是花很时间的事情.自己付出了很多,如果不能得到读者的认同,那这个专题写下去也没什么意义了.这个专题不是教你怎么使用Linq to S