Я столкнулся с проблемой при создании контекста моей базы данных при использовании команды scaffold-dbcontext.Кажется, проблема возникает, когда генерируются ограничения внешнего ключа.
Я не знаю, прав ли я, но подозреваю, что проблема связана с тем фактом, что в родительской таблице более одного дочернего элемента.Команда scaffold анализирует результаты, возвращенные после запроса системных таблиц.Мне интересно, правильно ли интерпретируются результаты, когда несколько дочерних элементов (с одинаковыми внешними ключами) появляются под одной родительской таблицей.
Таблицы:
У TRANSPORT есть дочерний PRODORDER
PRODORDER имеет дочерний PRODORDERPAR PRODORDER имеет дочерний BUNDLE
BUNDLE имеет дочерний BUNDLEPAR
Я приложил файл со сценарием для создания примера.Если в консоли диспетчера пакетов Visual Studio введена следующая команда: Scaffold-DbContext "Источник данных = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = xx.xx.xx.xx) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = YOUSERVICE))) Пользователь Id = USERNAME; Password = USERPWD»Oracle.EntityFrameworkCore -Force -OutputDir Модели / Entity -Tables ТРАНСПОРТ, PRODORDER, ПАКЕТ, BUNDLEPAR -ContextDir Модели / Context -Context BundleContext
1014 *, то это заканчивается следующей проблемой: Не удалось создать внешний ключ 'ONETRLAARC.BUNDLE (FKTRANSPORTID, FKTRANSPORTID, FKPOID, FKPOID)'.Ключ для 'POID; FKTRANSPORTID; POID; FKTRANSPORTID' не найден в основном типе сущности 'Prodorder'.
Моя версия сборок: Oracle.EntityFrameworkCore 2.19.0-beta4 Oracle.ManagedDataAccess.Core2.19.3
Не могли бы вы сказать мне, если я сделал что-то не так?
Я проверил на двух серверах, и результат точно такой же.
-- TRANSPORT
CREATE TABLE TRANSPORT
(
TRANSPORTID VARCHAR2(20 CHAR) NOT NULL,
SITEORIGINID VARCHAR2(3 CHAR) NOT NULL,
EXITDATE DATE,
MOTID VARCHAR2(20 CHAR),
INCOTERM VARCHAR2(3 CHAR),
DESTINATION VARCHAR2(20 CHAR),
NETWEIGHT NUMBER(13),
GROSSWEIGHT NUMBER(13),
CREATOR VARCHAR2(32 CHAR),
CREATEDATE DATE,
MODIFIER VARCHAR2(32 CHAR),
MODIFDATE DATE
);
CREATE INDEX IDX_TRANSPORT_01 ON TRANSPORT(SITEORIGINID);
CREATE UNIQUE INDEX IDX_TRANSPORT_PK ON TRANSPORT(TRANSPORTID);
ALTER TABLE TRANSPORT ADD (
CONSTRAINT IDX_TRANSPORT_PK
PRIMARY KEY
(TRANSPORTID)
USING INDEX IDX_TRANSPORT_PK
ENABLE VALIDATE);
-- PRODORDER
CREATE TABLE PRODORDER
(
POID VARCHAR2(20 CHAR) NOT NULL,
FKTRANSPORTID VARCHAR2(20 CHAR) NOT NULL,
CREATOR VARCHAR2(32 CHAR),
CREATEDATE DATE,
MODIFIER VARCHAR2(32 CHAR),
MODIFDATE DATE
);
CREATE UNIQUE INDEX IDX_PRODORDER_PK ON PRODORDER(POID, FKTRANSPORTID);
ALTER TABLE PRODORDER ADD (
CONSTRAINT IDX_PRODORDER_PK
PRIMARY KEY
(POID, FKTRANSPORTID)
USING INDEX IDX_PRODORDER_PK
ENABLE VALIDATE);
ALTER TABLE PRODORDER ADD (
CONSTRAINT IDX_PRODORDER_FK
FOREIGN KEY (FKTRANSPORTID)
REFERENCES TRANSPORT (TRANSPORTID)
ON DELETE CASCADE
ENABLE VALIDATE);
-- PRODORDERPAR
CREATE TABLE PRODORDERPAR
(
NAME VARCHAR2(40 CHAR) NOT NULL,
VALUE VARCHAR2(512 CHAR),
FKTRANSPORTID VARCHAR2(20 CHAR) NOT NULL,
FKPOID VARCHAR2(20 CHAR) NOT NULL,
CREATOR VARCHAR2(32 CHAR),
CREATEDATE DATE,
MODIFIER VARCHAR2(32 CHAR),
MODIFDATE DATE
);
CREATE UNIQUE INDEX IDX_PRODORDERPAR_PK ON PRODORDERPAR(NAME, FKPOID, FKTRANSPORTID);
ALTER TABLE PRODORDERPAR ADD (
CONSTRAINT IDX_PRODORDERPAR_PK
PRIMARY KEY
(NAME, FKPOID, FKTRANSPORTID)
USING INDEX IDX_PRODORDERPAR_PK
ENABLE VALIDATE);
ALTER TABLE PRODORDERPAR ADD (
CONSTRAINT IDX_PRODORDERPAR_FK
FOREIGN KEY (FKPOID, FKTRANSPORTID)
REFERENCES PRODORDER (POID,FKTRANSPORTID)
ON DELETE CASCADE
ENABLE VALIDATE);
-- BUNDLE
CREATE TABLE BUNDLE
(
GLOBALID VARCHAR2(20 CHAR) NOT NULL,
INTERNALID VARCHAR2(20 CHAR),
LOCALID VARCHAR2(20 CHAR),
ARTICLEID VARCHAR2(20 CHAR),
NETWEIGHT NUMBER(13),
GROSSWEIGHT NUMBER(13),
CONSUMED INTEGER DEFAULT 0,
CONSUMEDDATE DATE,
CONSUMPTIONID VARCHAR2(20 CHAR),
ENTRYDATE DATE,
BLOCKED INTEGER DEFAULT 0,
INVOICEDATE DATE,
REMARKS NVARCHAR2(2000),
FKTRANSPORTID VARCHAR2(20 CHAR) NOT NULL,
FKPOID VARCHAR2(20 CHAR) NOT NULL,
CREATOR VARCHAR2(32 CHAR),
CREATEDATE DATE,
MODIFIER VARCHAR2(32 CHAR),
MODIFDATE DATE,
RECEIPTDATE DATE,
REPELLED INTEGER DEFAULT 0,
REPELLEDDATE DATE,
BLOCKEDDATE DATE,
DESADVID VARCHAR2(20 CHAR),
DESADVSTATUS VARCHAR2(10 CHAR),
DESADVSTATUSDATE DATE
);
CREATE UNIQUE INDEX IDX_BUNDLE_01 ON BUNDLE(GLOBALID, FKPOID, FKTRANSPORTID);
CREATE INDEX IDX_BUNDLE_02 ON BUNDLE(INTERNALID);
CREATE INDEX IDX_BUNDLE_03 ON BUNDLE(LOCALID);
CREATE INDEX IDX_BUNDLE_04 ON BUNDLE(CONSUMED, CONSUMEDDATE);
CREATE INDEX IDX_BUNDLE_05 ON BUNDLE(DESADVID);
CREATE UNIQUE INDEX IDX_BUNDLE_PK ON BUNDLE(GLOBALID);
ALTER TABLE BUNDLE ADD (
CONSTRAINT IDX_BUNDLE_PK
PRIMARY KEY
(GLOBALID)
USING INDEX IDX_BUNDLE_PK
ENABLE VALIDATE);
ALTER TABLE BUNDLE ADD (
CONSTRAINT IDX_BUNDLE_FK
FOREIGN KEY (FKPOID, FKTRANSPORTID)
REFERENCES PRODORDER (POID,FKTRANSPORTID)
ON DELETE CASCADE
ENABLE VALIDATE);
-- BUNDLEPAR
CREATE TABLE BUNDLEPAR
(
NAME VARCHAR2(40 CHAR) NOT NULL,
VALUE VARCHAR2(512 CHAR),
FKTRANSPORTID VARCHAR2(20 CHAR) NOT NULL,
FKPOID VARCHAR2(20 CHAR) NOT NULL,
FKBGLOBALID VARCHAR2(20 CHAR) NOT NULL,
CREATOR VARCHAR2(32 CHAR),
CREATEDATE DATE,
MODIFIER VARCHAR2(32 CHAR),
MODIFDATE DATE
);
CREATE UNIQUE INDEX IDX_BUNDLEPAR_PK ON BUNDLEPAR(NAME, FKBGLOBALID);
ALTER TABLE BUNDLEPAR ADD (
CONSTRAINT IDX_BUNDLEPAR_PK
PRIMARY KEY
(NAME, FKBGLOBALID)
USING INDEX IDX_BUNDLEPAR_PK
ENABLE VALIDATE);
ALTER TABLE BUNDLEPAR ADD (
CONSTRAINT IDX_BUNDLEPAR_FK
FOREIGN KEY (FKBGLOBALID)
REFERENCES BUNDLE (GLOBALID)
ON DELETE CASCADE
ENABLE VALIDATE);