Sql server SQL Server:指向一个表的两个外键。错误:引入外键约束可能导致循环或多个级联路径
我得到了一个错误: 味精1785,第16级,状态0,第238行Sql server SQL Server:指向一个表的两个外键。错误:引入外键约束可能导致循环或多个级联路径,sql-server,entity-framework,foreign-keys,code-first,Sql Server,Entity Framework,Foreign Keys,Code First,我得到了一个错误: 味精1785,第16级,状态0,第238行 在表“Studios”上引入外键约束“FK_Studios_Members_HeadId”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束 下面是我遇到问题的两个表的简化版本: CREATE TABLE [Members] ( [MemberId] int NOT NULL IDENTITY ) CREATE TABLE [Studios] ( [Studio
在表“Studios”上引入外键约束“FK_Studios_Members_HeadId”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束 下面是我遇到问题的两个表的简化版本:
CREATE TABLE [Members]
(
[MemberId] int NOT NULL IDENTITY
)
CREATE TABLE [Studios]
(
[StudioId] int NOT NULL IDENTITY,
[HeadId] int,
[OwnerId] int,
CONSTRAINT [PK_Studios] PRIMARY KEY ([StudioId]),
CONSTRAINT [FK_Studios_Members_OwnerId]
FOREIGN KEY ([OwnerId]) REFERENCES [Members] ([MemberId])
ON DELETE SET NULL,
CONSTRAINT [FK_Studios_Members_HeadId]
FOREIGN KEY ([HeadId]) REFERENCES [Members] ([MemberId])
ON DELETE SET NULL
)
我发现如果我切换两个FK的顺序,第二个FK总是会出错。我不明白为什么这会导致级联问题,因为两者都有“ON DELETE SET NULL”
这是由EF核心代码首先生成的,所以我需要这些关系,不能只是在后端破解触发器
我遗漏了什么?我不确定答案是否适用于您的设计,我也不确定您的设计是如何确定的……但作为替代设计,我认为不会有相同的问题,您是否考虑过单独的中间关系表 这种方法的一个好处是,它允许您在每个位置拥有多个成员
CREATE TABLE [Members]
(
[MemberId] int NOT NULL IDENTITY
)
CREATE TABLE [Studios]
(
[StudioId] int NOT NULL IDENTITY,
CONSTRAINT [PK_Studios] PRIMARY KEY ([StudioId]),
)
--Contains Owner, Head, etc.
CREATE TABLE [Relationships]
(
[RelationshipId] int NOT NULL IDENTITY,
[RelationshipId] nvarchar(20) NOT NULL
)
CREATE TABLE [StudioMemberRelationships]
(
[StudioMemberRelationshipId] int NOT NULL IDENTITY,
[StudioId] int NOT NULL,
[MemberId] int NOT NULL,
[RelationshipTypeId] int NOT NULL,
CONSTRAINT [FK_StudioMemberRelationships_StudioId]
FOREIGN KEY ([StudioId]) REFERENCES [Studios] ([StudioId])
ON DELETE SET NULL,
CONSTRAINT [FK_StudioMemberRelationships_MemberId]
FOREIGN KEY ([MemberId]) REFERENCES [Members] ([MemberId])
ON DELETE SET NULL,
CONSTRAINT [FK_StudioMemberRelationships_RelationshipId]
FOREIGN KEY ([RelationshipId]) REFERENCES [Relationships] ([RelationshipId])
ON DELETE SET NULL
)
我不确定是否有一个答案能与你的答案相匹配,我也不确定你的设计是如何固定的……但作为一个替代设计,我认为不会有同样的问题,你考虑过一个单独的中间关系表吗 这种方法的一个好处是,它允许您在每个位置拥有多个成员
CREATE TABLE [Members]
(
[MemberId] int NOT NULL IDENTITY
)
CREATE TABLE [Studios]
(
[StudioId] int NOT NULL IDENTITY,
CONSTRAINT [PK_Studios] PRIMARY KEY ([StudioId]),
)
--Contains Owner, Head, etc.
CREATE TABLE [Relationships]
(
[RelationshipId] int NOT NULL IDENTITY,
[RelationshipId] nvarchar(20) NOT NULL
)
CREATE TABLE [StudioMemberRelationships]
(
[StudioMemberRelationshipId] int NOT NULL IDENTITY,
[StudioId] int NOT NULL,
[MemberId] int NOT NULL,
[RelationshipTypeId] int NOT NULL,
CONSTRAINT [FK_StudioMemberRelationships_StudioId]
FOREIGN KEY ([StudioId]) REFERENCES [Studios] ([StudioId])
ON DELETE SET NULL,
CONSTRAINT [FK_StudioMemberRelationships_MemberId]
FOREIGN KEY ([MemberId]) REFERENCES [Members] ([MemberId])
ON DELETE SET NULL,
CONSTRAINT [FK_StudioMemberRelationships_RelationshipId]
FOREIGN KEY ([RelationshipId]) REFERENCES [Relationships] ([RelationshipId])
ON DELETE SET NULL
)
你看到了吗?我不知道这是否有助于回答这个问题,但它帮助我理解了一般问题:-)嗯,许多可能的重复之一:你看到了吗?我不知道这是否有助于回答这个问题,但它帮助我理解了一般问题:-)嗯,许多可能的重复之一: