Внешний ключ для тех же свойств уже существует
У меня есть Table1 и Table2.
Table1 имеет foreignKey
указывая на первичный ключ Table2. Это может быть плохой дизайн, но я не могу его изменить, так как он старый.
Теперь я хочу сначала использовать EF с кодом и попытался сгенерировать для него модель и классы DbContext с помощью следующей команды:
dotnet ef dbcontext scaffold "Server=Server1;Database=DBName;Integrated Security=True;MultiSubnetFailover=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
И получаю следующую ошибку:
Внешний ключ {'ForeignKeyId'} не может быть добавлен к типу сущности 'TABLENAME', потому что внешний ключ с теми же свойствами уже существует в типе сущности 'TABLENAME' и также нацелен на ключ {'FOREIGNKEY'} в 'FOREIGNKEY_PrimaryTable'.
Есть ли способ преодолеть эту ошибку?
1 ответ
Я не знаю, удалось ли вам это сделать, и нужно ли оно вам вообще после всего этого времени, но так как я попал сюда из Google (3 лучших результата), я напишу, как я решил эту проблему. Может быть, это поможет кому-то в будущем.
Для меня это было потому, что у меня было 2 внешних ключа , но для них были сгенерированы 3 ограничения .
После просмотра сценариев для данной таблицы:
CREATE TABLE [dbo].[VacationBooking](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[VacationType] [bigint] NOT NULL,
[StartDateTime] [datetime] NOT NULL,
[EndDateTime] [datetime] NOT NULL,
[User] [bigint] NOT NULL,
[Employee] [bigint] NOT NULL,
[Status] [int] NOT NULL CONSTRAINT [DF_VacationBooking_Status] DEFAULT ((0)),
[IsSameDayVacation] [bit] NOT NULL CONSTRAINT [DF_VacationBooking_IsSameDayVacation] DEFAULT ((0)),
[NumberOfHoursAbsent] [decimal](5, 2) NOT NULL CONSTRAINT [DF_VacationBooking_NumberOfHoursAbsent] DEFAULT ((0.00))
CONSTRAINT [PK_VacationBooking] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO
-- Constraint 1
ALTER TABLE [dbo].[VacationBooking] WITH CHECK ADD CONSTRAINT [FK_VacationBooking_User] FOREIGN KEY([User])
REFERENCES [dbo].[User] ([Id])
GO
ALTER TABLE [dbo].[VacationBooking] CHECK CONSTRAINT [FK_VacationBooking_User]
GO
-- Constraint 2
ALTER TABLE [dbo].[VacationBooking] WITH CHECK ADD CONSTRAINT [FK_VacationBooking_User1] FOREIGN KEY([Employee])
REFERENCES [dbo].[User] ([Id])
GO
ALTER TABLE [dbo].[VacationBooking] CHECK CONSTRAINT [FK_VacationBooking_User1]
GO
-- Constraint 3
ALTER TABLE [dbo].[VacationBooking] WITH CHECK ADD CONSTRAINT [FK_VacationBooking_User2] FOREIGN KEY([Employee])
REFERENCES [dbo].[User] ([Id])
GO
ALTER TABLE [dbo].[VacationBooking] CHECK CONSTRAINT [FK_VacationBooking_User2]
GO
Мне нужно иметь 2 fk, чтобы
User
стол (один на
author
, и один для
employee
кого это касается), но тогда должно быть только 2 ограничения.
После того, как я удалил
Ограничение 3
из моей таблицы я успешно создаю базу данных.