1. 程式人生 > >EntityFramework實體默認值遇到Oracle自增主鍵

EntityFramework實體默認值遇到Oracle自增主鍵

數據 默認值 max sta rem IT nextval clas ger

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自增主鍵