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"
不知道这是并发安全。在Sql Server中不是。 Doens't Postgresql有相当于SS的'Scope_Identity'功能吗? –
我认为就是这样。它在这里说currval,https://www.postgresql.org/docs/8.2/static/functions-sequence.html,“请注意,因为这是返回一个会话本地值,它给出了一个可预测的答案,无论其他自本届会议以来,会议已经执行了nextval。“ –