1

我正在使用 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 do 0 并且我不能将它设置为 null 因为它是一个 PK 所以当我尝试插入时触发器不起作用。我的解决方案是将触发器中的“if”更改为“0”而不是“null”,但我不确定它是否是正确的解决方案。有没有更聪明的方法来做到这一点?

4

2 回答 2

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;
于 2013-11-29T16:44:05.740 回答
0

另一种选择是将实体 PK 的属性StoreGeneratedPattern更改为“Identity”(插入时生成一个值,更新时保持不变。)

使用此解决方案,您不必触摸数据库触发器并添加额外的 if 语句。

于 2018-01-31T06:55:36.297 回答