Rafy 框架 - 实体支持只更新部分变更的字段
Rafy 快一两年没有大的更新了。并不是这个框架没人维护了。相反,主要是因为自己的项目、以及公司在使用的项目,都已经比较稳定了,也没有新的功能添加。但是最近因为外面使用了 Rafy 的几个公司,找到我,提出了一些明确的需求,期望我做一些相应的升级。所以可能最近几个月,会陆续更新 Rafy 框架。
目前,Rafy 已经支持了 NetStandard 2.0。最近升级后,可能截止到明年,会陆续支持 NET5-6 上的一些功能。
今天这篇博客,主要是记录了一个客户提出了多次的需求:实体更新时,只更新改动的字段。
听上去,这个需求是一个非常简单的需求,但是我一直没有升级。原因是认识使用 Rafy 的开发者,都会更多地关注领域模型。而不需要太多关注 Update 语句具体是更新了几个字段。Rafy 框架会管理好领域框架的状态变更。事实上,这几年确实没有升级,而开发者也用得很好,很少有人关注。但是这次客户提出意见,由于他们的实体类中的属性实在太多了,查看日志中的更新语句时,较难定位具体已经修改的属性。再加之,Rafy 接下来会添加一个只查询部分实体属性的功能。所以就一并完成了。
主要设计思路
下面,主要截了一些设计过程的图就好了。实现不难,有兴趣的看源码就行。主要就是先在脑图中整理好需求、设计、场景、测试用例,然后 TDD 先编写相应的单元测试,再实现框架的内部代码。
实现效果
实现完成后,所有单元测试运行通过。
查看日志,Sql 的对比效果,升级前的更新语句:
UPDATE [Users] SET [AddedTime] = '2000/1/1 0:00:00',[Age] = 100,[LoginName] = '',[UserName] = 'nameChanged;',[TasksTime] = 0,[TestUserExt_UserCode] = 'DefaultUserCode' WHERE [Id] = 2967;
升级后的更新语句,也只更新变更后的属性了:
UPDATE [Users] SET [UserName] = 'nameChanged;' WHERE [Id] = 2968;
Rafy 框架 - 实体支持只更新部分变更的字段的更多相关文章
- 关于EntityFramework 更新数据记录时字段全部更新问题和不从数据库中获取直接更新记录
一.一直对这个比较疑惑感觉只修改一条数据记录的一个字段结果更新Savechages后跟踪生成sql竟然是全部被修改,感觉微软怎么这么傻,总觉得会有其它方式可以只更新部分字段,但一直没有找到相关设置,最 ...
- Rafy 领域实体框架示例(1) - 转换传统三层应用程序
Rafy 领域实体框架发布后,虽然有帮助文档,许多朋友还是反映学习起来比较复杂,希望能开发一个示例程序,展示如何使用 Rafy 领域实体框架所以,本文通过使用 Rafy 领域实体框架来改造一个传统的三 ...
- Rafy 领域实体框架 - 树型实体功能(自关联表)
在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解. 场景 在开发数据库应用程序时,往往会遇到自关联表的场景.例如,分类信息.组织架构中的部门.文件夹信息等,都 ...
- Rafy 领域实体框架演示(3) - 快速使用 C/S 架构部署
本系列演示如何使用 Rafy 领域实体框架快速转换一个传统的三层应用程序,并展示转换完成后,Rafy 带来的新功能. <福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!> ...
- Rafy 领域实体框架简介
按照最新的功能,更新了最新版的<Rafy 领域实体框架的介绍>,内容如下: 本文包含以下章节: 简介 特点 优势 简介 Rafy 领域实体框架是一个轻量级 ORM 框架. 与一般的 ORM ...
- Rafy 框架 - 大批量导入实体
某些场景下,开发者希望能够大批量地把实体的数据导入到数据库中.虽然使用实体仓库保存实体列表非常方便,但是其内部实现机制是一条一条的保存到数据库,当实体的个数较多时,效率就会很低.所以 Rafy 设计了 ...
- Rafy 领域实体框架 - 领域模型设计器(建模工具)设计方案
去年4月,我们为 Rafy 框架添加了领域模型设计器组件.时隔一年,谨以本文,简要说明该领域模型设计器的设计思想. 设计目标 Rafy 实体框架中以领域驱动设计作为指导思想.所以在开发时,以领域建模为 ...
- Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成
前言 Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 ORM 的功能.由于在 09 年最初设计时,ORM 部分的设计并不是最重要 ...
- Rafy 领域实体框架演示(4) - 使用本地文件型数据库 SQLCE 绿色部署
本系列演示如何使用 Rafy 领域实体框架快速转换一个传统的三层应用程序,并展示转换完成后,Rafy 带来的新功能. <福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!> ...
随机推荐
- Windows10下MySQL的安装
简单介绍一下MySQL的安装 官方网址:https://www.mysql.com/downloads/ 1.找到MySQL Community Edition (GPL) (注:GPL版本为开源,非 ...
- nios eclipse提示LED_PIO_BASE没有声明,怎么回事?
这是因为名字不一致引起的比如,在生成SOPC系统时,双击PIO(Parallel I/O)(在Avalon Modules -> Other 下),为系统添加输出接口,你没有把该组件改名成LED ...
- 如何实现LRU缓存?
面试官:来了,老弟,LRU缓存实现一下? 我:直接LinkedHashMap就好了. 面试官:不要用现有的实现,自己实现一个. 我:..... 面试官:回去等消息吧.... 大家好,我是程序员学长,今 ...
- Windows下Rancher复制Pod内文件到本地
Rancher 未提供直接获取 Pod 内文件的工具(如果有请评论告知下,蟹蟹),但提供了 Rancher 的 CLI 客户端,通过 CLI 可以调用 k8s 的 CLI (kubectl) 命令来操 ...
- 洛谷P2115 Sabotage G 题解
题目 [USACO14MAR]Sabotage G 题解 本蒟蒻又来了,这道题可以用二分答案来解决.我们可以设答案最小平均产奶量为 \(x \ (x \in[1,10000])\) .然后二分搜索 \ ...
- Python习题集(八)
每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! https://www.cnblogs.com/poloyy/category/1676599.html 题目 要求:判断数组元素 ...
- Pytest系列(3) - setup和teardown的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 用过unittest的童鞋都 ...
- Appium问题解决方案(7)- Could not find 'adb.exe' in PATH. Please set the ANDROID_HOME environment variable with the Android SDK root directory path
背景:运行代码提示找不到ADB An unknown server-side error occurred while processing the command. Original error: ...
- 判断input radio选中那个
var _sex=$("input[name='sex']:checked").val(); if(_sex==null){ layer.msg("请选择性别" ...
- pythonGUI-PySide2的使用笔记
用python开发跨平台的图形化界面,主流的有3种选择: Tkinter 基于Tk的Python库,Python官方标准库,稳定.发布程序较小,缺点是控件相对较少. wxPython 基于wxWidg ...