我正在使用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所以当我尝试插入时触发器不起作用。我的解决方案是改变"如果"触发到" 0"而不是" null"但我不确定这是不是正确的解决方案。有更聪明的方法吗?
答案 0 :(得分:2)
正如@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;
答案 1 :(得分:0)
另一种选择是将实体PK的属性StoreGeneratedPattern更改为“Identity”(在插入时生成一个值,并在更新时保持不变。)
使用此解决方案,您无需触摸数据库触发器并添加额外的if语句。