码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-04-04 15:01:11      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:start   默认值   body   ram   nextval   div   通过   赋值   code   

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]
begin
 select 序列名.nextval into :new.id from dual; 
end

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

create [or replace] tigger 触发器名 before insert
on 表名
[for each row WHEN(NEW.ID IS NULL)]
begin
 select 序列名.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)]
begin
 select 序列名.nextval into :new.id from dual; 
end

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

标签:start   默认值   body   ram   nextval   div   通过   赋值   code   

原文地址:https://www.cnblogs.com/zhangdk/p/8711304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!