Я новичок в EF, поэтому надеюсь, что это не глупый вопрос. Я искал, но ничего не нашел по моей проблеме.
У меня возникли проблемы с моделированием существующей базы данных в EF6. У меня есть настройка наследования TPT следующим образом:
модель TPT Мне пришлось вручную добавить таблицы BAMS*Environment из-за проблем с созданием модели . Все в порядке, пока я не добавлю внешний ключ из BAMSPortalEnvironment в BAMSPrimeEnvironment. Для данной среды Prime может быть среда Portal, а может и не быть, но для каждой среды Portal есть среда Prime.
Я получаю следующую ошибку от VS2017:
Запуск преобразования: множественность недопустима в роли «BAMSPortalEnvironment» в отношении «FK_BAMSPortalEnvironment_BAMSPrimeEnvironment». Поскольку свойства зависимой роли не являются ключевыми свойствами, верхняя граница кратности зависимой роли должна быть *.
Упрощенная модель соответствующих таблиц:
CREATE TABLE dbo.Environment(
EnvironmentId int IDENTITY(1,1) NOT NULL,
EnvironmentTypeId char(1) NOT NULL,
[Description] varchar(64) NOT NULL,
CONSTRAINT UQ_Environment UNIQUE NONCLUSTERED (EnvironmentId ASC) ON [PRIMARY],
CONSTRAINT PK_Environment PRIMARY KEY CLUSTERED (EnvironmentId ASC, EnvironmentTypeId ASC) ON [PRIMARY]
) ON [PRIMARY];
CREATE TABLE dbo.BAMSPrimeEnvironment(
EnvironmentId int NOT NULL,
EnvironmentTypeId AS CAST('B' AS char(1)) PERSISTED NOT NULL,
CONSTRAINT FK_BAMSPrimeEnvironment_Environment FOREIGN KEY (EnvironmentId, EnvironmentTypeId) REFERENCES dbo.Environment (EnvironmentId, EnvironmentTypeId) ON UPDATE NO ACTION ON DELETE CASCADE,
CONSTRAINT PK_BAMSPrimeEnvironment PRIMARY KEY CLUSTERED (EnvironmentId ASC, EnvironmentTypeId ASC) ON [PRIMARY]
) ON [PRIMARY];
CREATE TABLE dbo.BAMSPortalEnvironment(
EnvironmentId int NOT NULL,
EnvironmentTypeId AS CAST('P' AS char(1)) PERSISTED NOT NULL,
BAMSPrimeId int NOT NULL,
BAMSPrimeTypeId AS CAST('B' AS char(1)) PERSISTED NOT NULL,
CONSTRAINT FK_BAMSPortalEnvironment_BAMSPrimeEnvironment FOREIGN KEY (BAMSPrimeId, BAMSPrimeTypeId) REFERENCES dbo.BAMSPrimeEnvironment (EnvironmentId, EnvironmentTypeId) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT FK_BAMSPortalEnvironment_Environment FOREIGN KEY (EnvironmentId, EnvironmentTypeId) REFERENCES dbo.Environment (EnvironmentId, EnvironmentTypeId) ON UPDATE NO ACTION ON DELETE CASCADE,
CONSTRAINT UQ_BAMSPortalEnvironment_BAMSPrimeId_BAMSPrimeTypeId UNIQUE NONCLUSTERED (BAMSPrimeId ASC, BAMSPrimeTypeId ASC) ON [PRIMARY],
CONSTRAINT PK_BAMSPortalEnvironment PRIMARY KEY CLUSTERED (EnvironmentId ASC, EnvironmentTypeId ASC) ON [PRIMARY]
) ON [PRIMARY];
Я могу «исправить» это, изменив «0..1» на «*», но это не точно описывает мою модель. Чего мне не хватает, чтобы заставить это работать?
Это мой первый пост, поэтому, если вам нужна дополнительная информация, дайте мне знать.
Спасибо!
BAMSPrimeEnvironment
, что-то вроде этогоCONSTRAINT UQ_EnvironmentID_EnvironmentType UNIQUE NONCLUSTERED (EnvironmentId ASC, EnvironementType) ON [PRIMARY],
- person ironstone13   schedule 22.08.2017EnvironmentId
. Это очень странно, в обеих таблицах у вас есть составные ПК, поэтому это отношение явно0..1
, а не*
. Может быть, EF просто не поддерживает такой сценарий и неявно рассматривает каждый FK как один ко многим? - person ironstone13   schedule 23.08.2017