3

我有表 1 和表 2。

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_PrimaryTable”上的键 {'FOREIGNKEY'}。

有没有办法克服这个错误?

4

1 回答 1

1

我不知道你是否成功地完成了这项工作,或者你是否需要它,但自从我从谷歌来到这里(前 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 个 FKUser表(一个用于author,一个用于employee它所关注的),但应该只有 2 个约束。

我删除后

约束 3

从我的表中,我可以成功地搭建数据库。

于 2021-01-30T23:20:33.057 回答