Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:指向一个表的两个外键。错误:引入外键约束可能导致循环或多个级联路径_Sql Server_Entity Framework_Foreign Keys_Code First - Fatal编程技术网

Sql server SQL Server:指向一个表的两个外键。错误:引入外键约束可能导致循环或多个级联路径

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

我得到了一个错误:

味精1785,第16级,状态0,第238行
在表“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
)

你看到了吗?我不知道这是否有助于回答这个问题,但它帮助我理解了一般问题:-)嗯,许多可能的重复之一:你看到了吗?我不知道这是否有助于回答这个问题,但它帮助我理解了一般问题:-)嗯,许多可能的重复之一: