[英]EntityFramework Insert into Oracle table with a sequence as PK
我正在用EF这样插入:
using (Entities1 ctx = new Entities1())
{
ADDRESS_RESOLVER addrRes = new ADDRESS_RESOLVER();
addrRes.ZIP_VEGA = addr.ZipVega;
ctx.ADDRESS_RESOLVER.Add(addrRes);
ctx.SaveChanges();
}
表ADDRESS_RESOLVER具有主键ID和相关的序列。 触发器如下所示:
create or replace
trigger SEQ_ADDRESS_RESOLVER_ID
before insert on "MY_DB"."ADDRESS_RESOLVER"
for each row
begin
if inserting then
if :NEW."ID" is null then
select SEQ_ADDRESS_RESOLVER.nextval into :NEW."ID" from dual;
end if;
end if;
end;
问题是我的EF对象addrRes的ID settet做为0,我不能将其设置为null,因为它是PK,所以当我尝试插入时触发器不起作用。 我的解决方案是将触发器中的“ if”更改为“ 0”,而不是“ null”,但是我不确定这是否是正确的解决方案。 有更聪明的方法吗?
如@qujck所述,我需要像这样更改触发器:
create or replace
trigger SEQ_ADDRESS_RESOLVER_ID
before insert on "MY_DB"."ADDRESS_RESOLVER"
for each row
begin
if inserting then
if NVL(:NEW."ID", 0) = 0 then
select SEQ_ADDRESS_RESOLVER.nextval into :NEW."ID" from dual;
end if;
end if;
end;
另一个选择是将实体PK的属性StoreGeneratedPattern更改为“ Identity”(在插入时生成一个值,并在更新时保持不变。)
使用此解决方案,您无需触摸数据库触发器并添加额外的if语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.