EF Core 8中如何配置Oracle序列自增主键

胖静姑娘_7549

胖静姑娘_7549

2026-10-26

160人浏览

原创

EF Core 8 不支持 Oracle IDENTITY 列自动识别,需显式配置 ValueGeneratedOnAdd() 和 HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity),并确保表结构匹配(如用 GENERATED BY DEFAULT ON NULL AS IDENTITY),否则插入时触发 ORA-32795 或 ORA-01400 错误。

ef core 8中如何配置oracle序列自增主键

EF Core 8 不支持 Oracle IDENTITY 列的自动识别

EF Core 8 默认不会把 GENERATED ALWAYS AS IDENTITY 或 GENERATED BY DEFAULT AS IDENTITY 主键列当作自增字段处理——它会尝试插入 NULL 或默认值,结果触发 ORA-32795(ALWAYS)或 ORA-01400(BY DEFAULT 且未传值)错误。这不是 bug,而是 Oracle 的 IDENTITY 机制与 EF Core 的 Identity 假设不匹配:EF Core 认为“自增 = 插入时跳过该列”,但 Oracle 要求明确不提供该列(ALWAYS)或提供 NULL(BY DEFAULT ON NULL)才能触发序列。

必须显式配置 ValueGeneratedOnAdd + HasDatabaseGeneratedOption

要在 EF Core 8 中正确使用 Oracle 序列(无论底层是 IDENTITY 还是传统 Sequence+Trigger),关键不是靠“猜”,而是强制告诉 EF Core:“这个主键值由数据库生成,插入时不要发任何值”。

  • 用 ValueGeneratedOnAdd() 声明该属性在新增时由数据库生成
  • 配合 HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) 确保生成策略被正确定义(尤其在使用 Oracle Provider 8.x 时,仅靠 ValueGeneratedOnAdd() 可能不够)
  • 如果主键列名不是 Id(比如叫 product_id),必须额外调用 HasColumnName("product_id")

示例(OnModelCreating 中):

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载
modelBuilder.Entity<product>()
    .Property(p => p.Id)
    .ValueGeneratedOnAdd()
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
    .HasColumnName("product_id");</product>

Oracle 表结构必须匹配 EF Core 预期行为

EF Core 插入时不传主键列,所以你的 Oracle 表不能要求主键非空却没默认值或自增机制——否则直接报 ORA-01400。三种常见情况对应不同建表方式:

  • 用 IDENTITY(推荐,Oracle 12c+):选 GENERATED BY DEFAULT ON NULL AS IDENTITY,它允许你 INSERT 时不提主键列,也允许传 NULL,两者都触发自增;ALWAYS 也行,但要求 EF Core 绝对不传该列(更严格)
  • 用 Sequence + Default(兼容老版本):建表时写 id NUMBER DEFAULT seq_product.nextval,这样即使 EF Core 某些路径误传了 NULL,也能兜底生成值
  • 用 Sequence + Trigger(不推荐):触发器里判断 :new.id IS NULL 再赋值,但容易和 ORM 的并发插入逻辑冲突,且 EF Core 无法感知触发器行为,调试困难

MyBatis/MyBatis-Plus 用户注意:别混用注解和 EF Core 配置

如果你项目里同时存在 MyBatis 和 EF Core 访问同一张 Oracle 表,要小心注解污染。例如 MyBatis-Plus 的 @TableId(type = IdType.AUTO) 会让它自己去查 nextval,而 EF Core 又试图跳过主键列——两边逻辑打架,可能导致主键重复或跳号。统一用数据库侧机制(IDENTITY 或 DEFAULT)比 ORM 侧抢序列更可靠。

最易被忽略的一点:Oracle 的 CACHE 设置会影响主键连续性。哪怕只设 CACHE 20,数据库异常重启后可能丢失最多 20 个已分配但未使用的序列值——这在金融类业务中需提前对齐预期,不能假设“自增 = 绝对连续”。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

oracle

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2353

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1419

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

835

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

3292

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

5608

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1219

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

5891

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

5122

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

6834

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程