簡體   English   中英

EntityFramework插入序列為PK的Oracle表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM