前言
  FreeSql 提供丰富的数据库更新功能,支持单条或批量更新,支持更新指定的字段,在特定的数据库执行还可以返回更新后的记录。与删除一样,没有条件的话不会执行,避免全表修改到全表;
 
 

指定列更新

_freeSql.Update<Student>(1)
.Set(x=>x.Name,"1111")
.ExecuteAffrows();
//UPDATE [Student] SET [Name] = @p_0 WHERE([Id] = 1)
  更新很像直接写sql语句啊,直接使用主键更新,主键传入在Update()作为参数,赋值在Set()中;
 

条件更新

_freeSql.Update<Student>()
.Set(x => x.Name, "zz")
.Where(x => x.Id > 10)
.ExecuteAffrows();
//UPDATE [Student] SET [Name] = @p_0 WHERE([Id] > 10)
 

实体更新(官方推荐)

  实体更新将值修改后传入Update()中,实现修改,修改过程中可以像新增操作一样指定列、忽略列,也可以忽略空列;如果指定了Set条件更新,SetSource实体更新会失效
var student = new Student { Id = 1,Name="zz" };
_freeSql.Update<Student>()
.SetSource(student)
.ExecuteAffrows();
//UPDATE [Student] SET [Name] = @p_0, [Age] = @p_1, [Status] = @p_2, [AddTime] = @p_3, [Remark] = @p_4 WHERE([Id] = 1) _freeSql.Update<Student>()
.SetSourceIgnore(student, x => x == null)//忽略空列
.ExecuteAffrows();
//UPDATE [Student] SET [Name] = @p_0, [Age] = @p_1, [Status] = @p_2, [AddTime] = @p_3 WHERE([Id] = 1)
 
 

指定列、忽略列

  与新增一样,修改操作可以指定要修改的字段或不要修改的字段,从而使修改操作更灵活
var student = new Student { Id = 1, Name = "zz", AddTime = DateTime.Now };
_freeSql.Update<Student>()
.SetSource(student)
.UpdateColumns(a => a.Name)
.ExecuteAffrows();
//UPDATE [Student] SET [Name] = @p_0 WHERE([Id] = 1) _freeSql.Update<Student>()
.SetSource(student)
.IgnoreColumns(x => new { x.Age, x.Status })
.ExecuteAffrows();
//UPDATE [Student] SET [Name] = @p_0, [AddTime] = @p_1, [Remark] = @p_2 WHERE([Id] = 1)
 
 

自定义SQL

  自定义Set中更新字段,直接指定需要更新的字段,给我的直观感受就是类似于参数化sql语句
_freeSql.Update<Student>()
.SetRaw("Name=@name,Age=@age", new { name = "zz", age = 10 })
.Where("Id=@id", 1)
.ExecuteAffrows();
//UPDATE [Student] SET Name=@name,Age=@age
//WHERE (Id=@id)
 

Dto更新

  将自定义实体传如Update(),根据实体拼接修改字段,如果实体中字段与Dto中字段不匹配,则忽略掉不匹配字段,有了dto更新就不用在new一个实体对象了
_freeSql.Update<Student>()
.SetDto(new { Name = "z", abc = 2 })
.Where(x => x.Id == 1)
.ExecuteAffrows();
//UPDATE [Student] SET [Name] = @p_0 WHERE([Id] = 1)
 

字典更新

  有点像自定义更新,会将字典的key和value拼接成需要更新的值,如果数据库不存在字典的key字段会忽略掉
var dic = new Dictionary<string, object>();
dic.Add("Id", 1);
dic.Add("Name", "zz");
dic.Add("Addtime", DateTime.Now); _freeSql.UpdateDict(dic).AsTable(nameof(Student)).WherePrimary("Id").ExecuteAffrows();
//UPDATE [Student] SET [Name] = @p_0, [Addtime] = @p_1 WHERE([Id] = 1)
 
 
一个更新操作有这么多的方式实现,是不是有点迷糊了,首先是是Set/SetRaw,然后又有SetSource,最后又来个SetDto,区分一下吧~
 
Set/SetRaw  主要用于指定的字段更新,例如,一个大表上百字段,总不能new实体或者一个个全组装好吧。。
SetSource    主要用于已有实体对象,然后使用对象配合指定列、忽略列进行更新
SetDto       主要用于在已有目标值的Dto对象批量更新操作,想象下前后端互相传参的场景,下使用Dto去更新某些字段
 
 
 
 
 

FreeSql学习笔记——6.修改的更多相关文章

  1. WPF-学习笔记 动态修改控件Margin的值

    原文:WPF-学习笔记 动态修改控件Margin的值 举例说明:动态添加一个TextBox到Grid中,并设置它的Margin: TextBox text = new TextBox(); t_gri ...

  2. CUBRID学习笔记 6 修改用户密码

    修改密码 可以在web管理中修改. 还有另外两种体位 1  语句 ALTER USER user_name PASSWORD 'any_password_here_in_single_quotes'; ...

  3. MySQL学习笔记(5) - 修改和删除数据库

    1.完整语句 ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACHER SET [=] charset_name; 2.修改数据库的编码方式 al ...

  4. MySQL学习笔记(2) - 修改MySQL提示符的两种方法

    学习于慕课网 http://www.imooc.com/video/1806 1.方法一: cmd中处于未登录状态时,输入 mysql -uroot -p自己的密码 --prompt 新的提示符 示例 ...

  5. docker学习笔记:修改无法启动的容器中的内容

    我们可能会碰到这样的一个问题,在容器执行过程中,修改了容器的内容(如配置文件信息),但因为修改出了问题.导致容器关闭后,无法启动. 这事需要重新修改配置文件. 正常情况下可以通过 docker exe ...

  6. K8S学习笔记之修改K8S的api-server证书

    K8S的api-server证书包含很多IP和域名,有时候后期才发现证书内有错误,需要重新生成该证书. 修改server-csr.json,修改后基于原来的ca证书重新生成server.perm  s ...

  7. mongodb 学习笔记 2 --- 修改器

    修改器是为了爱update文档时,不需要传入整个文档就能修改当前文档的某个属性值,修改器用法如下: 假设数据库中foo集合中存在如下文档:{"name":"jack&qu ...

  8. Sharepoint2013搜索学习笔记之修改搜索拓扑(三)

    搜索服务新建好之后可以从管理中心,应用程序管理页面,进入搜索服务的管理页面,进入管理页面之后可以看到当前sharepoint场的搜索拓扑结构. 如果sharepoint场内有多台服务器,需要将搜索组件 ...

  9. 2017/01/20 学习笔记 关于修改和重打jar包

    背景 客户提供了jar包,但发现db表中缺少一个字段,db追加以后需要修改jar包中的source. 操作  如何修改jar包中的source并重新打一个新的jar包,做了如下操作. ① 开包 解压j ...

  10. git 学习笔记 ---撤销修改

    自然,你是不会犯错的.不过现在是凌晨两点,你正在赶一份工作报告,你在readme.txt中添加了一行: $ cat readme.txt Git is a distributed version co ...

随机推荐

  1. 面试官:来谈谈Vue3的provide和inject实现多级传递的原理

    前言 没有看过provide和inject函数源码的小伙伴可能觉得他们实现数据多级传递非常神秘,其实他的源码非常简单,这篇文章欧阳来讲讲provide和inject函数是如何实现数据多级传递的.ps: ...

  2. vue ssr error: TypeError: Cannot read property 'replace' of undefined

    在开发vue ssr应用时, yarn build  yarn start 之后启动正常: info Server running at: http://0.0.0.0:6606 在访问页面时,发现页 ...

  3. HTML 面试题

    .code { background-color: rgba(246, 246, 246, 1); color: rgba(232, 62, 140, 1) } DOCTYPE的作用? DOCTYPE ...

  4. 开启Word、Excel、PPT时速度很慢的一种解决方法

      本文介绍基于修改加载项,解决Microsoft Office系列软件开启速度较慢的办法.   最近,发现Excel软件的打开速度越来越慢,会在一定程度上影响工作效率.因此尝试对此加以解决.其中,本 ...

  5. 【uni-app】【01】底部导航栏与页面切换

    1.(配置文件在哪)uni-app 路由控制是在 pages.json文件中的. 2.(基本配置项有哪些)初学的时候主要有三个配置项,①pages ② globalStyle ③ tabbar [!T ...

  6. apache install

    https://www.gnu.org/software/libtool/ ./configure --prefix=/usr/local/libtoolmakesudo make install h ...

  7. Qt编写物联网管理平台40-类型种类

    一.前言 为了增强本系统的拓展性,做成通用的物联网管理平台,特意将控制器主设备类型.探测器子设备类型.对应种类符号等信息,全部做成表格可自定义添加和修改,这样在控制器信息表和探测器信息表管理的时候,可 ...

  8. IM开发干货分享:如何优雅的实现大量离线消息的可靠投递

    1.点评 IM聊天消息的可靠投递,是每个线上产品都要考虑的IM热点技术问题. IM聊天消息能保证可靠送达,对于用户来说,就好比把钱存在银行不怕被偷一样,是信任的问题.试想,如果用户能明显感知到聊天消息 ...

  9. [Flink] Flink运行过程中Flink作业运行崩溃,且`TaskManager`报:"Association with remote system [akka.tcp://flink@flink-236429.ns-69020:6123] has failed, address is now gated for [50] ms. Reason: [Disassociated]"

    1 问题描述 一个长期正常运行的FlinkSqlCdcJob(Flink 1.12 . Flink CDC 1.3.0),运行崩溃,且TaskManager的日志(taskmanager.log)报: ...

  10. WPF 动态加载嵌入主程序的DLL

    WPF 动态加载嵌入主程序的DLL,好处是节省文件数量,坏处是启动影响加载速度. 首先将DLL添加进项目,选择添加现有项,设置生成操作为"嵌入资源". 代码: public App ...