简体   繁体   中英

Foreign key on the same properties already exists

I have Table1 and Table2.

Table1 has a foreignKey pointing to Table2 primary Key. It could be a bad design, but I cannot change it as it is old.

Now I want to use EF with code first and tried to generate a model and DbContext classes for it through the following command:

dotnet ef dbcontext scaffold "Server=Server1;Database=DBName;Integrated Security=True;MultiSubnetFailover=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

And getting the following error:

The foreign key {'ForeignKeyId'} cannot be added to the entity type 'TABLENAME' because a foreign key on the same properties already exists on entity type 'TABLENAME' and also targets the key {'FOREIGNKEY'} on 'FOREIGNKEY_PrimaryTable'.

Is there a way I can overcome this error?

I don't know if you managed to make this work, or if you need it at all after all this time, but since I got here from google (top 3 results) I will write up how I solved this issue. Maybe it helps someone in future.

For me it was because I had 2 foreign keys , but 3 constrains where generated for them.

After looking at scripts for given table:

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

I need to have 2 fk's to User table (one for author , and one for employee whom it concerns), but there should only be then 2 constrains.

After I deleted

Constraint 3

from my table, I successfully scaffold database.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM