2016-06-29 72 views
0

我已將POCO映射到視圖。當EF確實插入,它生成以下命令插入視圖中不返回主鍵

INSERT INTO "public"."vw_place"("Name","Description","Point") VALUES ($1,$2,$3) RETURNING "PlaceId" 

但代碼,引發以下錯誤...

{「空存儲生成的值被用於返回非空的成員 類型的「PlaceId 'DataAccess.Place'。」}

這裏是觸發功能,做插入...

CREATE OR REPLACE FUNCTION vw_place_dml() 
    RETURNS trigger AS 
$BODY$ 
        BEGIN 
         IF TG_OP = 'INSERT' THEN 

         INSERT INTO tbl_place 
         (
         "Name", 
         "Description", 
         "Point" 
        ) 
        VALUES 
        (
         NEW."Name", 
         NEW."Description", 
         ST_GeomFromWKB(NEW."Point", 4326) 
        ); 

          RETURN NEW; 

          ELSIF TG_OP = 'UPDATE' THEN 

          UPDATE tbl_place SET 
         "PlaceId" = NEW."PlaceId", 
         "Name" = NEW."Name", 
         "Description" = NEW."Description", 
         "Point" = ST_GeomFromWKB(NEW."Point", 4326) 
        WHERE 
         "PlaceId" = OLD."PlaceId"; 

          RETURN NEW; 

          END IF; 
          RETURN NEW; 
          END; 
       $BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
ALTER FUNCTION vw_place_dml() 
    OWNER TO postgres; 

如果我在pgAdmin中運行它,它不會返回任何內容,這是問題,但行已成功插入並生成了PlaceId。

INSERT INTO "public"."vw_place"("Name","Description","Point") VALUES 
('ergw','regr','\x0101000000000000009846b2bfe4e068d7ff33a73f') 

RETURNING "PlaceId" 

回答

0

在觸發功能插入後和RETURN NEW;之前,我加...

NEW."PlaceId" = currval('"tbl_place_PlaceId_seq"'); 
+1

不知道這是併發安全。在Sql Server中不是。 Doens't Postgresql有相當於SS的'Scope_Identity'功能嗎? –

+0

我認爲就是這樣。它在這裏說currval,https://www.postgresql.org/docs/8.2/static/functions-sequence.html,「請注意,因爲這是返回一個會話本地值,它給出了一個可預測的答案,無論其他自本屆會議以來,會議已經執行了nextval。「 –