EntityFramework实体默认值遇到Oracle自增主键

 2023-09-10 阅读 21 评论 0

摘要:1. Oracle实现主键自动增长 一般我们在Oracle实现主键自动增长,通常通过序列加触发器实现。 定义序列用于获取递增数字 CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n] [{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE n

1. Oracle实现主键自动增长

一般我们在Oracle实现主键自动增长,通常通过序列加触发器实现。

定义序列用于获取递增数字

CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n]              [{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE n | NOCACHE}]

定义触发器,关联序列和表,并在插入数据前补充主键ID

create [or replace] tigger 触发器名 before insert
on 表名
[for each row]
beginselect 序列名.nextval into :new.id from dual; 
end

一般我们会加上条件以应对已经指定主键的情况

create [or replace] tigger 触发器名 before insert
on 表名
[for each row WHEN(NEW.ID IS NULL)]
beginselect 序列名.nextval into :new.id from dual; 
end

2. EntityFramework默认值带来的问题

通过触发器和序列一般我们就可以实现主键的自动增长,但是在EF中,实体中的主键会被赋值为默认值0。这导致触发器达不到触发的(默认触发条件),
这时我们就需要调整触发器执行条件:当未指定id或者id为默认值0时自动生成主键。

create [or replace] tigger 触发器名 before insert
on 表名
[for each row WHEN(NEW.ID IS NULL or NEW.ID = 0)]
beginselect 序列名.nextval into :new.id from dual; 
end

主键只能有一个吗、转载于:https://www.cnblogs.com/zhangdk/p/8711304.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/32475.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息