Ошибка Entity Framework, генерация команды вставки - PullRequest
0 голосов
/ 09 марта 2011

Я работаю с БД PostgreSql, используя Entity Framework: Когда я добавляю новый элемент в БД, он генерирует странный код:

INSERT INTO (SELECT "person_contact"."person_id" AS "person_id",
             "person_contact"."contact_id" AS "contact_id" 
             FROM "public"."person_contact" AS "person_contact")
       ("person_id","contact_id") 
       VALUES (cast(141792 as int8),cast(289406040 as int8))

Поэтому вместо имени таблицы добавляется

SELECT "person_contact"."person_id" AS "person_id",
"person_contact"."contact_id" AS "contact_id" 
FROM "public"."person_contact" AS "person_contact"

"public". "person_contact"

Как устранить эту ошибку Entity Framework ???

UPD: та же проблема, когда я пытаюсь удалить запись "person_contact".В операторе удаления вместо имени таблицы - выберите запрос.

Ответы [ 2 ]

1 голос
/ 12 марта 2011

Существует несколько способов исправить это:

Они перечислены в том порядке, в котором я бы их попробовал.

0 голосов
/ 09 июня 2016

Скорее всего, вы забыли создать первичный ключ для этой таблицы.

У меня была такая же проблема, и решение в моем случае было очень простым. Проблема была в том, что у меня был столбец с именем "id", но я забыл сделать его Первичным ключом. В тот момент, когда я установил его в качестве первичного ключа, все было в порядке.

Это очень странно, потому что EF обычно не будет импортировать таблицу без первичного ключа, но когда у вас есть столбец с именем "id", предполагается, что это первичный ключ.

Структура моего стола была:

*DROP TABLE IF EXISTS "public"."fact_season_tickets";
CREATE TABLE "public"."fact_season_tickets" (
"id" int8 DEFAULT nextval('fact_season_tickets_id_seq'::regclass) NOT NULL,
"season_ticket_id" int8 NOT NULL,
"date_key" int4 NOT NULL,
"station_id" int4 NOT NULL,
"amount" numeric(18,2) DEFAULT 0 NOT NULL,
"status" int4 NOT NULL
)
WITH (OIDS=FALSE)*

Сгенерированный оператором NpgSql INSERT был:

*INSERT INTO (SELECT "fact_season_tickets"."id",
    "fact_season_tickets"."season_ticket_id",+
    "fact_season_tickets"."date_key", 
    "fact_season_tickets"."station_id", 
    "fact_season_tickets"."amount", 
    "fact_season_tickets"."status" 
FROM "public"."fact_season_tickets" AS "fact_season_tickets") 
("season_ticket_id","date_key","station_id","amount","status") 
VALUES (510::int8,20150630,2,18.00::numeric,1) 
RETURNING "id"*

Решением было просто создание первичного ключа:

*ALTER TABLE "public"."fact_season_tickets" ADD PRIMARY KEY ("id");*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...