EntityFramework實體默認值遇到Oracle自增主鍵
阿新 • • 發佈:2018-04-04
數據 默認值 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自增主鍵