EFCore HasDefaultValueSql (续2 HasComputedColumnSql)
前情:EFCore HasDefaultValueSql
EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)-CSDN博客
小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd, HasComputedColumnSql 也有了疑问:
HasComputedColumnSql
对于计算列,无论是插入还是编辑,应该由数据库的 SCHEMA
上的计算逻辑负责。对于这种场景,ValueGeneratedOnAdd
并不适合,因为它只针对在插入时生成的值,而计算列可能涉及插入和更新两个阶段的行为。
在 EF Core 中,针对计算列的正确配置应该是使用 ValueGeneratedOnAddOrUpdate
或 HasComputedColumnSql
,以下是详细说明。
1. HasComputedColumnSql
HasComputedColumnSql
是用于配置 计算列 的 Fluent API,告诉 EF Core 该列的值是由数据库根据 SQL 逻辑自动计算的。
核心特点
- 专用于计算列:用于设置数据库的
GENERATED ALWAYS AS
或等效功能。 - 插入和更新行为:EF Core 不会尝试在插入或更新中显式写入该列的值,而是完全依赖数据库的计算逻辑。
- 适用场景:
- 表达式列(如计算两个字段的总和)。
- 基于函数、触发器等逻辑动态生成值的列。
使用示例
假设数据库有一个计算列 TotalPrice
,定义为 Price * Quantity
。
数据库表定义:
CREATE TABLE Orders ( Id INT PRIMARY KEY, Price DECIMAL(10, 2), Quantity INT, TotalPrice AS Price * Quantity PERSISTED
);
EF Core 配置:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{ modelBuilder.Entity<Order>() .Property(o => o.TotalPrice) .HasComputedColumnSql("[Price] * [Quantity]", stored: true);
}
解释:
[Price] * [Quantity]
是计算逻辑。stored: true
表示这是一个 持久化计算列(PERSISTED
),结果会存储在数据库中。如果是非持久化列,则省略stored: true
。
插入和更新行为
- 插入时,
INSERT
语句中不会包含TotalPrice
。 - 更新时,
UPDATE
语句中也不会包含TotalPrice
。 - 示例生成的 SQL:
INSERT INTO Orders (Price, Quantity) VALUES (10.00, 2);
2. ValueGeneratedOnAddOrUpdate
ValueGeneratedOnAddOrUpdate
表示字段的值可以在 插入 和 更新 时由数据库生成。这在某些场景下也适用于计算列,但通常需要结合 HasComputedColumnSql
使用。
核心特点
- 同时覆盖 插入 和 更新 的场景。
- 不会显式插入或更新字段,EF Core 会假定该字段的值由数据库生成。
使用场景
如果 EF Core 的 HasComputedColumnSql
不适用(如动态触发器逻辑),可以单独使用 ValueGeneratedOnAddOrUpdate
。
示例配置:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{ modelBuilder.Entity<Order>() .Property(o => o.TotalPrice) .ValueGeneratedOnAddOrUpdate();
}
此时,TotalPrice
的计算完全依赖数据库逻辑,EF Core 只会在需要时从数据库中重新加载值。
对比和选择
特性 | HasComputedColumnSql | ValueGeneratedOnAddOrUpdate |
---|---|---|
核心用途 | 显式配置计算列的 SQL 表达式。 | 泛化的生成策略,适用于动态生成值的场景。 |
插入行为 | 不会包含该列,依赖数据库计算。 | 不会包含该列,依赖数据库生成。 |
更新行为 | 不会包含该列,依赖数据库计算。 | 不会包含该列,依赖数据库更新或触发器生成。 |
适用场景 | 数据库定义了明确的计算逻辑(如表达式列)。 | 动态值生成逻辑,如触发器或非表达式列。 |
总结
- 如果字段是严格意义上的 计算列,应使用
HasComputedColumnSql
。 - 如果字段依赖动态触发器逻辑,但没有明确的计算公式,考虑使用
ValueGeneratedOnAddOrUpdate
。 - 通常情况下,
HasComputedColumnSql
是计算列的首选方式,因为它与数据库SCHEMA
定义直接对应,行为明确且易于维护。
补充,mysql的计算列文档:MySQL :: MySQL 8.4 Reference Manual :: 15.1.20.8 CREATE TABLE and Generated Columns
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
EFCore HasDefaultValueSql (续2 HasComputedColumnSql)
前情:EFCore HasDefaultValueSql EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)-CSDN博客 小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd, HasComputedColumnSql 也有了疑问: HasComputedColumnSql 对于计算…...
![](https://i-blog.csdnimg.cn/direct/74649bf27e494a62abfcf5e733fba449.png)
阿里巴巴TransmittableThreadLocal使用指南
前言 ThreadLocal在上下文的数据传输上非常的方便和简洁。工业实践中,比较常用的有三个,ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal,那么他们三个之间有什么区别呢? 常见的三种ThreadLocal比较 ThreadLoc…...
![](https://www.ngui.cc/images/no-images.jpg)
ubuntu20下编译linux1.0 (part1)
author: hjjdebug date: 2025年 01月 09日 星期四 15:56:15 CST description: ubuntu20下编译linux1.0 (part1) 该博客记录了新gcc编译旧代码可能碰到的问题和解决办法, 可留作参考 操作环境: ubuntu20 $ gcc --version gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 $ as --vers…...
![](https://i-blog.csdnimg.cn/img_convert/7f2d984876df26967b09b948deb14e0a.png)
欧拉公式和傅里叶变换
注:英文引文机翻,未校。 中文引文未整理去重,如有异常,请看原文。 Euler’s Formula and Fourier Transform Posted byczxttkl October 7, 2018 Euler’s formula states that e i x cos x i sin x e^{ix} \cos{x} i …...
![](https://i-blog.csdnimg.cn/direct/04d31fa600584d3886b77b92ab5c6122.png)
Jenkins内修改allure报告名称
背景: 最近使用Jenkins搭建自动化测试环境时,使用Jenkins的allure插件生成的报告,一直显示默认ALLURE REPORT,想自定义成与项目关联的名称,如图所示,很明显自定义名称显得高大上些,之前…...
![](https://i-blog.csdnimg.cn/direct/22456d20c2164811bab1d7b50a65bf5b.png)
30天开发操作系统 第 12 天 -- 定时器 v1.0
前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单,只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器,CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…...
![](https://www.ngui.cc/images/no-images.jpg)
Ubuntu | PostgreSQL | 解决 ERROR: `xmllint` is missing on your system.
解决 sudo apt install apt-file sudo apt-file updatesudo apt-file search xmllint sudo apt install libxml2-utils执行 # postgres源码安装包解压文件夹中 make install make install问题 make -C src install make[2]: Entering directory /home/postgres/postgresql-1…...
![](https://i-blog.csdnimg.cn/direct/5dfd114a2b1c4512ae15149d2806c3df.png)
uniapp使用chooseLocation安卓篇
本文章全部以高德地图为例 代码 <view class"bottom"><button click"choose">定位</button> </view> choose() {uni.chooseLocation({success: function(res) {console.log(位置名称: res.name);console.log(详细地…...
![](https://www.ngui.cc/images/no-images.jpg)
《PC 上的开源神经网络多模态模型:开启智能交互新时代》
《PC 上的开源神经网络多模态模型:开启智能交互新时代》 一、引言二、多模态模型基础剖析(一)核心概念解读(二)技术架构探秘 三、开源多模态模型的独特魅力(一)开源优势尽显(二&…...
![](https://i-blog.csdnimg.cn/direct/0a47b689d0a2499ab67fbc7e3a377fd7.png)
Apache JMeter 压力测试使用说明
文章目录 一、 安装步骤步骤一 下载相关的包步骤二 安装 Jmeter步骤三 设置 Jmeter 工具语言类型为中文 二、使用工具2.1 创建测试任务步骤一 创建线程组步骤二 创建 HTTP 请求 2.2 配置 HTTP 默认参数添加 HTTP消息头管理器HTTP请求默认值 2.3 添加 查看结果监听器2.4 查看结果…...
![](https://i-blog.csdnimg.cn/direct/9787647fc3ef47d09987f4ceb6202b13.png)
腾讯云AI代码助手编程挑战赛-知识百科AI
作品简介 知识百科AI这一编程主要用于对于小朋友的探索力的开发,让小朋友在一开始就对学习具有探索精神。在信息化时代下,会主动去学习自己认知以外的知识,同时丰富了眼界,开拓了新的知识。同时催生了在大数据时代下的信息共享化…...
![](https://i-blog.csdnimg.cn/direct/ad9f17b3ac6f40f988fa8c885e5e6163.png)
【SpringAOP】Spring AOP 底层逻辑:切点表达式与原理简明阐述
前言 🌟🌟本期讲解关于spring aop的切面表达式和自身实现原理介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 &am…...
![](https://i-blog.csdnimg.cn/direct/d356be18697e439db09e902751d2b9ac.png)
HTTP-响应协议
HTTP的响应过程? 浏览器请求数据--》web服务器过程:请求过程 web服务器将响应数据-》到浏览器:响应过程 响应数据有哪些内容? 1.和请求数据类似。 2. 响应体中存储着web服务器返回给浏览器的响应数据。并且注意响应头和响应体之间…...
![](https://www.ngui.cc/images/no-images.jpg)
SQL进阶实战技巧:即时订单比例问题
目录 0 需求描述 1 数据准备 2 问题分析 3 小结 往期精彩 0 需求描述 订单配送中,如果期望配送日期和下单日期相同,称为即时订单,如果期望配送日期和下单日期不同,称为计划订单。 请从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单…...
![](https://www.ngui.cc/images/no-images.jpg)
什么是端口
端口是用来区分同一网络设备(IP地址)上运行的不同服务或应用程序接收外部数据的窗口。 以下是几个要点: 对于我们发送请求指定的url中的端口,指的是对方服务器的用于接收数据的端口,如http的80端口,服务器通常都会设定要监听来自…...
![](https://www.ngui.cc/images/no-images.jpg)
【Flutter】使用ScrollController配合EasyRefresh实现列表预加载:在还未滑动到底部时加载下一页数据
需求/背景 在我们的业务场景中,列表的加载使用easy_refresh组件: https://pub.dev/packages/easy_refresh 大概效果是往上滑动到一定的offset会触发一个上滑加载,可以触发一些网络请求拉取列表后面的数据来展示。 这种模式一般在一页翻完…...
![](https://www.ngui.cc/images/no-images.jpg)
【2025 Rust学习 --- 11 实用工具特型01】
清理特型Drop 当一个值的拥有者消失时,Rust 会丢弃(drop)该值。丢弃一个值就必须释放 该值拥有的任何其他值、堆存储和系统资源。 丢弃可能发生在多种情况下: 当变量超出作用域时;在表达式语句的末尾;当…...
![](https://www.ngui.cc/images/no-images.jpg)
网络安全基础以及概念
1. 安全领域的概念 1.1 网络产品 1. EDR:终端检测与响应(Endpoint Detection and Response),终端主要包括我们的笔记本、台式机、手机、服务器等,EDR是一种运行在终端上安全软件,主要负责监控网络流量、可疑进程、注册表活动等其他安全相关的事件与活动。当发现有威胁是自…...
![](https://i-blog.csdnimg.cn/direct/797b5b8fa9ee493ca6dfd10d5737dfb9.png)
windows和linux的抓包方式
1.实验准备: 一台windows主机,一台linux主机 wireshark使用: 打开wireshark,这些有波动的就代表可以有流量经过该网卡,选择一张有流量经过的网卡 可以看到很多的流量,然后可以使用过滤器来过滤想要的流量…...
![](https://i-blog.csdnimg.cn/direct/422ead50044540f398efc9f2ea3a543a.png)
【Uniapp-Vue3】v-if条件渲染及v-show的选择对比
如果我们想让元素根据响应式变量的值进行显示或隐藏可以使用v-if或v-show 一、v-show 另一种控制显示的方法就是使用v-show,使用方法和v-if一样,为true显示,为false则不显示。 二、v-if v-if除了可以像v-show一样单独使用外,还…...
![](https://www.ngui.cc/images/no-images.jpg)
宝塔面板使用 GoAccess Web 日志分析教程
宝塔面板是一个简单方便的服务器运维面板,但其网站统计功能是收费的。而 GoAccess 是一个用 C 编写的免费开源 Web日志分析器,本文将介绍如何在宝塔面板中开启 GoAccess Web 日志分析功能。 内容索引 下载安装 GoAccess在宝塔面板中添加日志切割的计划任务将 Web 日志输出到…...
![](https://i-blog.csdnimg.cn/img_convert/38dc07ec26712c3806fc49a8d21e27c9.png)
Windows 安装 Docker 和 Docker Compose
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …...
![](https://www.ngui.cc/images/no-images.jpg)
arcgis中用python脚本批量给多个要素类的相同字段赋值
1、python脚本 import arcpy# 设置工作空间路径 arcpy.env.workspace = r"D:\test.gdb"# 要素集名称 feature_dataset = "test"# 线要素类名称列表,初始化为空 line_feature_classes = []# 遍历要素集获取所有线要素类 for fc in arcpy.ListFeatureClass…...
![](https://i-blog.csdnimg.cn/direct/d3474bf240ae4c298b0dfda8e8b2fc5a.png)
目标客户营销(ABM)结合开源AI智能名片2+1链动模式S2B2C商城小程序的策略与实践
摘要:在数字化营销日益盛行的今天,目标客户营销(Account Based Marketing, ABM)作为一种高度定制化的营销策略,正逐步成为企业获取高质量客户、提升市场竞争力的重要手段。与此同时,开源AI智能名片21链动模…...
![](https://i-blog.csdnimg.cn/direct/01ec1ce78b3b4197a7f2586861b47461.png)
《异步编程之美》— 全栈修仙《Java 8 CompletableFuture 对比 ES6 Promise 以及Spring @Async》
哈喽,大家好!在平常开发过程中会遇到许多意想不到的坑,本篇文章就记录在开发过程中遇到一些常见的问题,看了许多博主的异步编程,我只能说一言难尽。本文详细的讲解了异步编程之美,是不可多得的好文…...
![](https://www.ngui.cc/images/no-images.jpg)
新模型设计:Hybrid Quantum-Classical Neural Network (HQCNN) for Image Classification
新模型设计:Hybrid Quantum-Classical Neural Network (HQCNN) for Image Classification 目录 新模型设计:Hybrid Quantum-Classical Neural Network (HQCNN) for Image Classification引言1. Hybrid Quantum-Classical Neural Network 简介2. Hybrid Quantum-Classical Neu…...
![](https://i-blog.csdnimg.cn/direct/8304d00a6e6146c5bb0628b5c0d03910.png)
iOS 中spring动画的使用
我们先来看以下两个动画的效果 上面的位移动画,一个是普通的动画,一个是spring动画,可以明显的看出来,spring动画在动画的前期更快一些,给人的感觉干脆,利落 以下是代码 - (void)normalAnimation {[UIV…...
![](https://i-blog.csdnimg.cn/direct/6ad8ec8ff29c4003866d55533e9bd38f.png)
初学stm32 --- DMA直接存储器
目录 DMA介绍 STM32F1 DMA框图 DMA处理过程 DMA通道 DMA优先级 DMA相关寄存器介绍 F1 DMA通道x配置寄存器(DMA_CCRx) DMA中断状态寄存器(DMA_ISR) DMA中断标志清除寄存器(DMA_IFCR) DMA通道x传输…...
![](https://www.ngui.cc/images/no-images.jpg)
校医院挂号及预约 APP 的设计与实现
标题:校医院挂号及预约 APP 的设计与实现 内容:1.摘要 随着移动互联网的发展,越来越多的人开始使用手机应用程序来解决生活中的各种问题。本项目旨在设计和实现一款校医院挂号及预约 APP,以提高校医院的服务效率和质量,方便师生就医。本文介…...
![](https://www.ngui.cc/images/no-images.jpg)
代理模式详解与应用
代理模式(Proxy Pattern),也称为委托模式或 surrogate 模式,是一种结构型设计模式。它为其他对象提供一个代理以控制对这个对象的访问。通过引入代理对象,可以在不改变原始对象接口的前提下,添加额外的功能…...
![](https://img-blog.csdnimg.cn/20201119202729270.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hpaGVsbA==,size_16,color_FFFFFF,t_70#pic_center)
网站写手怎么做/电脑培训班有哪些科目
很多平台都有点赞功能,今天提供的这个思路可用于很多平台,希望可以掌握该技巧,实现你自己的点赞器。本案例目标为虎嗅 24 小时频道点赞。 爬虫小课系列文章导读链接 第一篇:Python 爬虫小课 1-9 宝妈程序媛福利-育儿网问答数据抓取 第二篇:Python 爬虫小课 2-9 中国妖怪…...
![](https://img-blog.csdnimg.cn/img_convert/1b51a5e96fcc105bf38a923c80a3ead0.png)
优化资源配置/北仑seo排名优化技术
本文来自读者投稿作者:姚远首先我们给出MySQL内存使用的计算公式:MySQL理论上使用的内存 全局共享内存 max_connections线程独享内存。也就是:innodb_buffer_pool_size innodb_log_buffer_size thread_cache_size table_open_cache tabl…...
![](/images/no-images.jpg)
怎么做网站空间/市场调研分析报告
不能用技术的角度去分析事务 SONY的PSP,我们知道大多数都是黑色的。但也有其它颜色,不过价格就要比黑色贵很多。其实从技术的角度来说,东西都是一样的,人家换了一个颜色的壳子,就要比黑色壳子多卖200元左右,…...
![](https://s1.51cto.com/images/blog/201801/10/9fc3755bf145aa725f2b36a8e029f91b.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
小公司网站如何做/浙江seo技术培训
今天东哥想用Scorpio Pro 5查一下猪场某人邮箱的密码,发现不太好使。决定自己写个自己用。代码如下 #!/usr/bin/python #-*- coding:utf-8 -*- #输入这一条就可以在Python脚本里面使用汉语注释!此脚本可以直接复制使用;while True: …...
![](/images/no-images.jpg)
wordpress 增加新功能/简单的seo
需求场景 使用uniapp开发,有A、B、C三个页面,在页面A、B点击按钮之后都可以跳转到C页面。在C页面操作完毕之后,点击确定按钮,返回A或B页面(由哪个页面跳转过来的就返回哪一个页面)。 解决代码 以下是C页…...
![](/images/no-images.jpg)
the7做的网站/人力资源培训
一、常用CDR快捷键【Ctrl】:【Ctrl】 【X】剪切【Ctrl】 【C】复制【Ctrl】 【V】粘贴【Ctrl】 【A】全选【Ctrl】 【S】保存【Ctrl】 【O】打开【Ctrl】 【N】新建【Ctrl】 【F4】关闭【Ctrl】 【Z】取消【Ctrl】 【Shift】 【Z】恢复【Ctrl]U】下划线【Ctrl]。】…...