前言
  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. AtCoder Beginner Contest 378

    Contest Link 还得加练. A & B & C & D 不具备任何思维含量. Submission A Submission B Submission C Submi ...

  2. uniapp安卓在线更新版本

    实现逻辑 通过获取线上的版本号和app的版本号进行对比 查看是不是最新版 - app版本号小于线上版本号则不是最新版 提示更新 模拟检测更新请求 起一个服务,也就是检测更新的接口 返回值为最新版本号和 ...

  3. JAVA开发规范v1.0

    01-中铜国贸JAVA开发规范v1.0 一.编程规约 (一)命名风格 [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例:_name / _name / $Obje ...

  4. 鸿蒙应用开发从入门到入行 - 篇2:HarmonyOS开发快速基础入门

    鸿蒙应用开发从入门到入行 第二天 - 开发工具与基础组件 导读:在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用.ArkUI里的基础组件,并通过制作一个简单界面掌握使用 鸿蒙开发工具 - De ...

  5. 明察秋毫--用ss工具统计网络栈内存使用

    前言 本文介绍了用ss工具来统计一下当前网络栈的内存使用情况 环境准备 组件 版本 操作系统 Ubuntu 22.04.4 LTS 查看socket内存相关参数,-m 参数 ss -tm State ...

  6. Flutter 长列表优化

    Flutter 长列表优化 固定列表和长列表的区别 固定列表中的组件,每次都会被重新构建 ListView.builder会按需构建列表元素,也就是只有那些可见得元素才会调用itemBuilder 构 ...

  7. Flutter & Xcode15-beta 冲突

    安装了Xcode15-beta后运行 Flutter 一直报有两个相同的文件冲突,这时候指定一下 Xcode-beta 的位置就好了 sudo xcode-select --switch /Appli ...

  8. PG 实现 Dynamic SQL

    CREATE OR REPLACE FUNCTION public.exec( text) RETURNS SETOF RECORD LANGUAGE 'plpgsql' AS $BODY$ BEGI ...

  9. 2024年1月Java项目开发指南5:controller、service、mapper

    准备工作 你知道什么是JSON吗? JSON是什么? 格式是什么? 有什么用? 有什么优点? 有什么缺点? 请自己百度探索一下,对JSON做了个了解,如果你不知道什么是JSON的话,知道就免了,直接下 ...

  10. 【报错解决】【Vue】与后端交互时,http与https跨域问题

    问题 xhr.js:220 Mixed Content: The page at 'https://xxx' was loaded over HTTPS, but requested an insec ...