前一章讲了如何利用MySoft.Data进行数据的插入,利用DbSession可以实现各种数据增、删、改、查等各种复杂的处理,本章着重讲解一下数据的更新:

数据更新在日常开发中占据中非常重要的地位,尽次于查询。下面就讲解一下如何利用DbSession来进行数据的更新。

继续引用前面的DbSession配置,如下:

代码/// <summary>/// 数据库访问类/// </summary>public static class DataAccess{/// <summary>/// 通过配置节来实例化DbSession/// </summary>public static readonly DbSession DefaultSession = new DbSession("DataExample");/// <summary>/// 通过自定义类来实例化DbSession/// </summary>public static readonly DataExample ExampleSession = new DataExample();}/// <summary>/// DataExample会话类/// </summary>public class DataExample : DbSession{public DataExample(): base("DataExample"){
#if DEBUGthis.RegisterSqlLogger(log =>{System.IO.File.WriteAllText("c:\\log.txt", log);});
#endif}}

下面还是利用DataAccess.ExampleSession来进行操作:

一、强类型的数据更新

下面的操作以Products实体为例进行操作:

1、单个实体数据更新

代码            //实例化一个Products对象Products product = new Products(){ProductID = 1,ProductName = "测试产品1"};//更新单个对象product.Attach();DataAccess.ExampleSession.Save(product);

2、批量实体数据更新

代码            //实例化一组Products对象List<Products> list = new List<Products>();for (int index = 0; index < 10; index++){list.Add(new Products(){ProductID = index,ProductName = "测试产品" + index});}//批量更新数据DbBatch batch = DataAccess.ExampleSession.BeginBatch(10);list.ForEach(item =>{item.Attach();batch.Save(item);});batch.Process();

3、带事务单个实体更新(MySoft.Data内置实现DbTrans)

代码            //实例化一个Products对象Products product = new Products(){ProductID = 1,ProductName = "测试产品1"};//使用事务进行数据插入using (DbTrans trans = DataAccess.ExampleSession.BeginTrans()){try{product.Attach();trans.Save(product);trans.Commit();}catch{trans.Rollback();}}

4、带事务批量实体更新(MySoft.Data内置实现DbTrans)

代码//实例化一组Products对象List<Products> list = new List<Products>();for (int index = 0; index < 10; index++){list.Add(new Products(){ProductID = index,ProductName = "测试产品" + index});}//使用事务进行批量数据插入using (DbTrans trans = DataAccess.ExampleSession.BeginTrans()){try{DbBatch batch = trans.BeginBatch(10);list.ForEach(item =>{item.Attach();batch.Save(item);});batch.Process();trans.Commit();}catch{trans.Rollback();}}

5、创建外部数据库链接方式更新

代码//实例化一个Products对象Products product = new Products(){ProductID = 1,ProductName = "测试产品1"};using (System.Data.Common.DbConnection conn = DataAccess.ExampleSession.CreateConnection()){//更新单个对象product.Attach();DataAccess.ExampleSession.SetConnection(conn).Save(product);}

注:批量插入可以采用同样的方法处理!

6、创建外部数据库事务方式更新

代码//实例化一个Products对象Products product = new Products(){ProductID = 1,ProductName = "测试产品1"};using (System.Data.Common.DbTransaction trans = DataAccess.ExampleSession.BeginTransaction()){try{//更新单个对象product.Attach();DataAccess.ExampleSession.SetTransaction(trans).Save(product);trans.Commit();}catch{trans.Rollback();}}

注:批量更新可以采用同样的方法处理!

当实体存在时更新,否则插入的处理方式:
代码            Products product = new Products(){ProductID = 1,ProductName = "测试产品"};DataAccess.ExampleSession.InsertOrUpdate(product);

以上操作相应的都可以使用事务来处理

二、UpdateCreator数据更新

通过更新创建器同样也可以达到上面的效果,也可以进行泛型方式进行数据插入,一般情况下创建器用于没有建立对象实体时直接对表和字段的操作。

1、通过实体更新实体

代码            UpdateCreator uc = UpdateCreator.NewCreator().From<Products>().SetEntity<Products>(product, true);DataAccess.ExampleSession.Excute(uc);

2、通过字符串表与字段更新数据

代码            UpdateCreator uc = UpdateCreator.NewCreator().From("Products").AddUpdate("ProductName", "测试产品").AddWhere("ProductID", 1);DataAccess.ExampleSession.Excute(uc);

三、用户自定义更新方式

DataAccess.ExampleSession.Update<Products>(Products._.ProductName, "测试产品", Products._.ProductID == 1);

条件可以多个组件产生,如下:

WhereClip where = Where.All;

if(条件一) where = where && Products._.ProductID == 1;

if(条件二) where = where && Products._.ProductID == 2;

//ProductID为1和2(相当于In操作)

if(条件三) where = where || Products._.ProductID.In(1,2);

//ProductID不为1和2(相当于Not In操作)

if(条件四) where = where || !Products._.ProductID.In(1,2);

……

DataAccess.ExampleSession.Update<Products>(Products._.ProductName, "测试产品", where);

以上通过创建器的方式同样可以用事务来操作 trans.Excute(uc);

这里只是简单的介绍了一下,还有更多的功能需要用户使用时才能体会到。

数据的更新操作就讲解到这里,下一章将讲解数据的删除(Delete)操作

有什么问题可以到此处:MySoft组件问题反馈与疑难解答

转载于:https://www.cnblogs.com/maoyong/archive/2010/04/13/1710913.html

MySoft.Data从入门到精通系列(五)【数据更新】相关推荐

  1. GPU 编程入门到精通(五)之 GPU 程序优化进阶

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 博主由于工作当中的需要,开始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GP ...

  2. ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)

    文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 本教程<ArcGIS从入门到精通系列实验教程>内容包括:ArcGIS平台简介.ArcGIS应用基础.空间数据的采集 ...

  3. OpenShift从入门到精通系列之一:通过OpenShift实现数字化转型

    OpenShift从入门到精通系列之一:通过OpenShift实现数字化转型 一.企业数字化转型之PaaS 二.企业数字化转型之DevOps 三.企业数字化转型之微服务 四.微服务架构的主要类型 五. ...

  4. Simulink仿真入门到精通(五) Simulink模型的仿真

    本系列教程是根据孙忠潇编著的<<Simulink仿真及代码生成技术入门到精通>>学习笔记. 目录 Simulink仿真入门到精通(一) Simulink界面介绍 Simulin ...

  5. Oracle 从入门到精通系列 - 前言

    Oracle 从入门到精通系列 - 前言 前言 一.需要具备的知识和工具 1.必须的 2.非必须的(能有最好) 二.大家能学到什么以及能学到什么程度 1.计划 2.能学到什么 3.能学到什么程度 三. ...

  6. RK3399平台入门到精通系列讲解 - 总目录

    总目录 欢迎大家来到内核笔记的<RK3399平台开发入门到精通系列讲解>,开始前博主先列出RK3399平台学习的大纲,同时这也可以作为大家学习RK3399内核与安卓框架的参考.下面蓝字都是 ...

  7. PostgreSQL数据库从入门到精通系列之五:深入理解lsn_proc、lsn_commit、lsn、txId、ts_usec

    PostgreSQL数据库从入门到精通系列之五:深入理解lsn_proc.lsn_commit.lsn.txId.ts_usec 一.深入理解lsn_proc 二.深入理解lsn_commit 三.深 ...

  8. Vue3+TypeScript从入门到精通系列之:泛型接口

    Vue3+TypeScript从入门到精通系列之:泛型接口 一.TypeScript的泛型接口代码 二.TypeScript的泛型接口代码转化为js代码 三.泛型接口.js输出如下所示 一.TypeS ...

  9. 【ArcGIS遇上Python】从入门到精通系列之第一章:ArcGIS Python简介

    文章目录 1. Python简介 2. Python的特点 3. ArcGIS的脚本语言 4. ArcGIS中的Python脚本编辑器 1. Python简介 Python是一种跨平台的计算机程序设计 ...

最新文章

  1. Webwork 学习之路【07】文件上传下载
  2. JAVA应用开发MQ实战最佳实践——Series2:消息队列RocketMQ性能测试案例
  3. 《深入浅出数据分析》为读者送上了章回小说的精彩
  4. Java 字符的验证
  5. WPF 创建无边框的圆角窗口
  6. 前端之 JavaScript 基础
  7. 论文阅读课1-Attention Guided Graph Convolutional Networks for Relation Extraction(关系抽取,图卷积,ACL2019,n元)
  8. oracle solaris 内核 源码,直接安装内核区域
  9. 1-7:学习shell之透过shell看世界
  10. android: ListView设置emptyView 误区
  11. 把ts自动合并 下载网页视频并自动合成视频
  12. 全减器及其相关概念的理解
  13. 艺工交叉——达芬奇只会画画吗?
  14. 软件测试常见面试题分享
  15. 海洋cms标签-海洋cms模板标签手册-海洋cms模板标签全套
  16. 《C++ Primer 第5版》-11.2关联容器概述-康奈尔笔记
  17. 首期「OSCHINA 开源软件趋势榜」榜单公布 | 有奖征文等你来
  18. PS压缩1寸照片大小降低到50KB以下的方法
  19. 计算机专业试讲10分钟教案,10分钟试讲教案模板.doc
  20. 关于virtualbox虚拟电脑控制台严重错误解决方法。。。(博客园搬家至此,尚未整理)(六)

热门文章

  1. 剑指Offer:剪绳子(动态规划、贪婪算法)
  2. 电缆桥架安装规范标准_电缆桥架怎么安装,桥架安装工艺分享
  3. 【数据挖掘知识点四】参数估计
  4. Leetcode 129. 求根到叶子节点数字之和 解题思路及C++实现
  5. 关于mysql数据库中存放中文字段乱码问题解决方案
  6. url传参参数编码的解码问题
  7. JDK源码解析 Integer类使用了享元模式
  8. CTFshow 反序列化 web261
  9. Hermite曲线与Bezier曲线的关系
  10. 2.1 基于文件读写图像数据