您的位置:首页 > 其它

CRL快速开发框架系列教程三(更新数据)

2016-11-08 15:47 513 查看

本系列目录

CRL快速开发框架系列教程一(Code First数据表不需再关心)

CRL快速开发框架系列教程二(基于Lambda表达式查询)

CRL快速开发框架系列教程三(更新数据)

CRL快速开发框架系列教程四(删除数据)

CRL快速开发框架系列教程五(使用缓存)

CRL快速开发框架系列教程六(分布式缓存解决方案)

CRL快速开发框架系列教程七(使用事务)

CRL快速开发框架系列教程八(使用CRL.Package)

CRL快速开发框架系列教程九(导入/导出数据)

CRL快速开发框架系列教程十(导出对象结构)

CRL快速开发框架系列教程十一(大数据分库分表解决方案)

CRL快速开发框架系列教程十二(MongoDB支持)

CRL快速开发框架系列教程十三(嵌套查询)

正文

CRL更新数据有多种方式,根据喜好和实际场景调用

只会提交修改过的属性,如果修改量为0,抛出异常

1.字典传参的形式(不推荐)

CRL.ParameCollection c = new CRL.ParameCollection();
c["ProductName"] = "product1";
Code.ProductDataManage.Instance.Update(b => b.Id == 4, c);


2.按匿名对象

Code.ProductDataManage.Instance.Update(b => b.Id == 4, new { ProductName = "product1" });


3.按对象差异更新(当对象不是查询创建)荐

这里手动通知哪些属性被更改了,以在更新时只修改被更改的属性

var p = new Code.ProductData() { Id = 4 };
//手动修改值时,指定修改属性以在Update时识别,分以下几种形式
p.Change(b => b.BarCode);//表示值被更改了
p.Change(b => b.BarCode, "123");//通过参数赋值
p.Change(b => b.BarCode == "123");//通过表达式赋值
p.Cumulation(b => b.ProductName, "1");//表示按字段累加
Code.ProductDataManage.Instance.Update(b => b.Id == 4, p);//指定查询更新


4.当对象是查询创建

属性更改后,CRL能自动识别哪些被更改了

p = Code.ProductDataManage.Instance.QueryItem(b => b.Id > 0);
p.UserId += 1;//只会更新UserId
p.ProductName = "2342342";
Code.ProductDataManage.Instance.Update(p);//按主键更新,主键值是必须的


5.使用完整查询关联更新

按SQL的形式,关联更新

右边$符表示关联表

var query = Code.OrderManage.Instance.GetLambdaQuery();
query.Join<Code.ProductData>((a, b) => a.Id == b.Id && b.Number > 10);
c = new CRL.ParameCollection();
c["UserId"] = "$UserId";//order.userid=product.userid
c["Remark"] = "2222";//order.remark=2222
Code.OrderManage.Instance.Update(query, c);
//等效语句为 update order set userid=ProductData.userid,remark='2222' from ProductData where order.id=ProductData.id and ProductData.number<10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: