Entity Framework \ Oracle неправильно генерирует PK - PullRequest
0 голосов
/ 27 мая 2020

Я сгенерировал таблицу в базе данных Oracle с переносом кода Entity Framework сначала (без явных изменений, все по умолчанию).

Модель

public long ID { get; set; }
public long SYSTEMID { get; set; }
public long QTY { get; set; }
public string PART_NO { get; set; }

Возникает проблема при вставке. При попытке добавить через EF журнал выводит:

declare
"ID" number(19,0);
begin
insert into "CONFIG"."PACKAGE_MATERIALS"("SYSTEMID", "QTY", "PART_NO")
values (:p0, :p1, :p2)
returning
"ID" into
"ID";
open :p3 for select
"ID" as "ID" from dual;
end;


-- :p0: '3' (Type = Int64)

-- :p1: '2' (Type = Int64)

-- :p2: '' (Type = Object)

-- :p3: 'null' (Type = Object, Direction = Output, IsNullable = false)

-- Executing at ********************

-- Failed in 20 ms with error: 
ORA-04045: errors during recompilation/revalidation of CONFIG.BIN$Xo9DAFoJTAW3XJg5mX0Pug==$0
ORA-38301: can not perform DDL/DML over objects in Recycle Bin
ORA-06512: at line 4 

Тот же оператор, запущенный непосредственно с БД, тоже не завершился успешно, хотя я получаю только первую ошибку.

Предположительно, база данных не работает. Не получается сгенерировать идентификатор и вставить его в поле. Последовательность и триггер были сгенерированы автоматически.

Сгенерированный триггер

TRIGGER "CONFIG"."BIN$Xo9DAFoJTAW3XJg5mX0Pug==$0"
before insert on "CONFIG"."PACKAGE_MATERIALS"
for each row
begin
  select "CONFIG"."SQ_PACKAGE_MATERIALS".nextval into :new."ID" from dual;
end;

Проблема как бы решается отключением сгенерированного триггера и ручным применением триггера, созданного SQL разработчиком.

TRIGGER PACKAGE_MATERIALS_TRG 
BEFORE INSERT ON PACKAGE_MATERIALS 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF INSERTING AND :NEW.ID IS NULL THEN
      SELECT SQ_PACKAGE_MATERIALS.NEXTVAL INTO :NEW.ID FROM SYS.DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;

Но я считаю, что должен быть способ заставить EF делать все правильно самостоятельно. Здесь? А в чем собственно проблема? Заранее спасибо.

Если это имеет значение:

Entity Framework v6.1.2

Oracle .ManagedDataAccess v12.2.1100

...