EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)

前情:EFCore HasDefaultValueSql

小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd 也有了疑问:

ValueGeneratedOnAddHasDefaultValueSqlEntity Framework Core 中用于管理字段默认值的两种不同配置方式,它们的作用和使用场景不同:


1. ValueGeneratedOnAdd 的作用

ValueGeneratedOnAdd 是一种 值生成策略,表示该字段的值将在数据库插入新记录时自动生成(由数据库负责)。

核心特点
  • 自动生成值:EF Core 会明确标记此字段的值应由数据库生成。
  • 适用场景
    • 数据库自动生成的默认值(如默认数值、当前时间戳等)。
    • 数据库的计算列(Computed)。
    • 使用主键自增的列(如 IDENTITYSEQUENCE)。
行为
  • 如果字段未显式赋值,ValueGeneratedOnAdd省略该字段,让数据库自动生成其值。
  • 即使字段显式赋值,EF Core 也会将其标记为“由数据库生成”,导致插入操作可能报错或忽略应用程序的赋值
示例代码

模型定义:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Example>() 
    .Property(e => e.Age) 
    .ValueGeneratedOnAdd(); 
} 

插入代码:

var example = new Example 
{ 
    Name = "Alice" // Age 未赋值 
}; 
context.Examples.Add(example); 
context.SaveChanges(); 

生成的 SQL:

INSERT INTO Example (Name) VALUES ('Alice'); -- Age 列未包含 

最终数据库会使用 DEFAULT 值或其他自动生成逻辑。


2. HasDefaultValueSql 的作用

HasDefaultValueSql 用于为数据库字段配置一个 默认值,该默认值由数据库在未显式指定值时自动填充。

核心特点
  • 设置字段的默认值:用于在迁移中生成 SQL,如 DEFAULT 或其他基于 SQL 的默认值。
  • 适用场景
    • 为字段配置一个静态或动态的默认值。
    • 只在 未显式赋值时 使用该默认值。
行为
  • 如果字段未显式赋值,EF Core 省略该字段,依赖数据库的 DEFAULT 值。
  • 如果字段显式赋值,EF Core 会将显式赋值的值写入 INSERT 语句,覆盖数据库的默认值。
示例代码

模型定义:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Example>() 
   .Property(e => e.Age) 
   .HasDefaultValueSql("18"); 
} 

插入代码:

var example = new Example 
{ 
    Name = "Bob", 
    Age = 25 // 显式赋值 
}; 
context.Examples.Add(example); 
context.SaveChanges(); 

生成的 SQL:

INSERT INTO Example (Name, Age) VALUES ('Bob', 25); -- 显式指定值 

区别对比

特性ValueGeneratedOnAddHasDefaultValueSql
作用标记值由数据库自动生成。配置字段的默认值(用于迁移和数据库)。
插入时行为总是省略未显式赋值的字段,依赖数据库生成值。如果字段未赋值,则省略字段,使用默认值。
显式赋值时行为即使显式赋值,可能仍被忽略或导致插入冲突。显式赋值时,生成的 SQL 使用显式值。
适用场景自增主键、数据库计算列等需要数据库生成值的字段。静态或动态的默认值,或需要数据库处理时的值。
迁移生成行为不设置默认值。生成 DEFAULT 或自定义 SQL 语句。

如何选择?

  • 如果字段的值 完全交由数据库生成(如自增、计算列等),使用 ValueGeneratedOnAdd
  • 如果字段有一个 静态或动态的默认值,并且你希望 EF Core 配置该默认值(如 DEFAULT 定义),使用 HasDefaultValueSql
  • 如果你需要两者结合(如自增且有默认值),可以同时使用,但需注意逻辑是否冲突。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953427.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题

1. IsaacGymEnvs项目介绍 IsaacGymEnvs&#xff1a;基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库&#xff0c;专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎&#xf…

ELK日志分析实战宝典之ElasticSearch从入门到服务器部署与应用

目录 ELK工作原理展示图 一、ElasticSearch介绍&#xff08;数据搜索和分析&#xff09; 1.1、特点 1.2、数据组织方式 1.3、特点和优势 1.3.1、分布式架构 1.3.2、强大的搜索功能 1.3.3、数据处理与分析 1.3.4、多数据类型支持 1.3.5、易用性与生态系统 1.3.6、高性…

android 自定义SwitchCompat,Radiobutton,SeekBar样式

纯代码的笔记记录。 自定义SwitchCompat按钮的样式 先自定义中间的圆球switch_thumb_bg.xml <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"oval&q…

【学习路线】Python自动化运维 详细知识点学习路径(附学习资源)

学习本路线内容之前&#xff0c;请先学习Python的基础知识 其他路线&#xff1a; Python基础 >> Python进阶 >> Python爬虫 >> Python数据分析&#xff08;数据科学&#xff09; >> Python 算法&#xff08;人工智能&#xff09; >> Pyth…

【URDF和SDF区别】

URDF&#xff08;Unified Robot Description Format&#xff0c;统一机器人描述格式&#xff09;和SDF&#xff08;Simulation Description Format&#xff0c;仿真描述格式&#xff09;是两种常用的机器人和仿真环境建模格式。虽然它们在许多方面有相似之处&#xff0c;但也存…

【翻译】2025年华数杯国际赛数学建模题目+翻译pdf自取

保存至本地网盘 链接&#xff1a;https://pan.quark.cn/s/f82a1fa7ed87 提取码&#xff1a;6UUw 2025年“华数杯”国际大学生数学建模竞赛比赛时间于2025年1月11日&#xff08;周六&#xff09;06:00开始&#xff0c;至1月15日&#xff08;周三&#xff09;09:00结束&#xff…

springboot vue uniapp 仿小红书 1:1 还原 (含源码演示)

线上预览: 移动端 http://8.146.211.120:8081/ 管理端 http://8.146.211.120:8088/ 小红书凭借优秀的产品体验 和超高人气 目前成为笔记类产品佼佼者 此项目将详细介绍如何使用Vue.js和Spring Boot 集合uniapp 开发一个仿小红书应用&#xff0c;凭借uniapp 可以在h5 小程序 app…

VS2015 + OpenCV + OnnxRuntime-Cpp + YOLOv8 部署

近期有个工作需求是进行 YOLOv8 模型的 C 部署&#xff0c;部署环境如下 系统&#xff1a;WindowsIDE&#xff1a;VS2015语言&#xff1a;COpenCV 4.5.0OnnxRuntime 1.15.1 0. 预训练模型保存为 .onnx 格式 假设已经有使用 ultralytics 库训练并保存为 .pt 格式的 YOLOv8 模型…

css盒子水平垂直居中

目录 1采用flex弹性布局&#xff1a; 2子绝父相margin&#xff1a;负值&#xff1a; 3.子绝父相margin:auto&#xff1a; 4子绝父相transform&#xff1a; 5通过伪元素 6table布局 7grid弹性布局 文字 水平垂直居中链接&#xff1a;文字水平垂直居中-CSDN博客 以下为盒子…

qt QPainter setViewport setWindow viewport window

使用qt版本5.15.2 引入viewport和window目的是用于实现QPainter画出来的内容随着窗体伸缩与不伸缩两种情况&#xff0c;以及让QPainter在widget上指定的区域(viewport)进行绘制/渲染&#xff08;分别对应下方demo1&#xff0c;demo2&#xff0c;demo3&#xff09;。 setViewpo…

深度学习-算法优化与宇宙能量梯度分布

在当今迅速发展的科技世界中&#xff0c;算法优化和能量分布问题已成为研究的热点&#xff0c;尤其是在人工智能、机器学习和物理科学领域。算法优化通常涉及提高计算效率和降低资源消耗&#xff0c;而宇宙能量梯度分布则涉及宇宙中能量的分布和流动方式。两者看似是完全不同的…

Linux驱动学习之第三个驱动程序(两个按键的驱动程序-读取按键值)

程序框架说明(和之前的LED驱动进行对比) 这个程序的框架与之前学习的第二个驱动程序(控制LED)的框架基本一致&#xff0c;第二个驱动程序的链接如下&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/144973219 所以如果前两这个LED驱动程序的框架掌握得很清楚了…

KMP前缀表 ≈ find() 函数——28.找出字符串中第一个匹配项的下标【力扣】

class Solution { public: //得到前缀表void getNext(int *next,string needle){int j0;for(int i1;i<needle.size();i){while(j>0 && needle[j]!needle[i]) jnext[j-1];//**j>0**>j0是出口if(needle[i]needle[j]) j;next[i]j;//若写入if中&#xff0c;则该…

vulnhub靶场【IA系列】之Tornado

前言 靶机&#xff1a;IA-Tornado&#xff0c;IP地址为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用虚拟机&#xff0c;网卡为桥接模式 本文所用靶场、kali镜像以及相关工具&#xff0c;我放置在网盘中&#xff0c;可以复制后面链接查看 htt…

【优选算法篇】:模拟算法的力量--解决复杂问题的新视角

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;优选算法篇–CSDN博客 文章目录 一.模拟算法二.例题1.替换所有的问号2.提莫攻击3.外观数列4…

云集电商:数据库的分布式升级实践|OceanBase案例

电商行业对数据库有哪些需求 云集电商作为一家传统电商企业&#xff0c;业务涵盖了美妆个护、服饰、水果生鲜、健康保健等多个领域&#xff0c;在创立四年后在纳斯达克上市&#xff08;股票代码&#xff1a;YJ&#xff09;。与京东、淘宝、拼多多等电商平台不同&#xff0c;云…

Kibana操作ES基础

废话少说&#xff0c;开干&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;截图更清晰&#xff0c;复制在下面 #库操作#创建索引【相当于数据库的库】 PUT /first_index#获…

AI大模型赋能!移远通信打造具有“超能力”的AI智能玩具解决方案

随着无线通信、先进算法以及AI大模型等前沿技术的蓬勃发展&#xff0c;许多玩具已经从简单的互动设备进化为集教育、陪伴和娱乐功能于一身的AI智能玩具&#xff0c;在儿童群体中日渐风靡。不仅如此&#xff0c;因其能提供满满的情绪价值&#xff0c;在成年人和老年人市场中也展…

从 SQL 语句到数据库操作

1. SQL 语句分类 数据定义语言 DDL &#xff1a; 用于定义或修改数据库中的结构&#xff0c;如&#xff1a;创建、修改、删除数据库对象。create、drop alter 数据操作语言 DML &#xff1a; 用于添加、删除、更新数据库中的数据。select、insert alter、drop 数据控制语言 D…

解锁 JMeter 的 ForEach Controller 高效测试秘籍

各位小伙伴们&#xff0c;今天咱就来唠唠 JMeter 里超厉害的 “宝藏工具”——ForEach Controller&#xff0c;它可是能帮咱们在性能测试的江湖里 “大杀四方” 哦&#xff01; 一、ForEach Controller 是啥 “神器” 想象一下&#xff0c;你手头有一串神秘钥匙&#xff0c;每…