2016-06-29 5 views
0

私はPOCOをビューにマッピングしました。 EFは、挿入を行う場合には、次のコマンドを生成...ビューに挿入してプライマリキーを返さない

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

しかし、コードは、次のエラーをスロー...

{ "ヌルストア生成された値は、のために返されました非NULL可能メンバータイプの '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を実行しました。 –

関連する問題