EFCore: reference twice to another table gets cycles or multiple cascade paths error

  Kiến thức lập trình

In my database, I want to create a table that references twice another table using a code-first approach. This is the code:

public class ArticleWord
{
    public long ID  { get; set; }
    public Article? Article { get; set; }
    public virtual Word Word { get; set; }
    public virtual Word WordTarget { get; set; }

    [ForeignKey(nameof(Word))]
    public long WordId { get; set; }

    [ForeignKey(nameof(WordTarget))]
    public long WordTargetId { get; set; }
}

I created the migration successfully, but when I update the database I get this error

Failed executing DbCommand (107ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [ArticleWords] (
    [ID] bigint NOT NULL IDENTITY,
    [ArticleID] bigint NULL,
    [WordId] bigint NOT NULL,
    [WordTargetId] bigint NOT NULL,
    [CreatedAt] datetime2 NOT NULL,
    [CreatedBy] nvarchar(max) NULL,
    [ModifiedAt] datetime2 NULL,
    [ModifiedBy] nvarchar(max) NULL,
    [IsDeleted] bit NOT NULL,
    CONSTRAINT [PK_ArticleWords] PRIMARY KEY ([ID]),
    CONSTRAINT [FK_ArticleWords_Articles_ArticleID] FOREIGN KEY ([ArticleID]) REFERENCES [Articles] ([ID]),
    CONSTRAINT [FK_ArticleWords_Words_WordId] FOREIGN KEY ([WordId]) REFERENCES [Words] ([ID]) ON DELETE CASCADE,
    CONSTRAINT [FK_ArticleWords_Words_WordTargetId] FOREIGN KEY ([WordTargetId]) REFERENCES [Words] ([ID]) ON DELETE CASCADE
);
Microsoft.Data.SqlClient.SqlException (0x80131904): Introducing FOREIGN KEY constraint 
'FK_ArticleWords_Words_WordTargetId' on table 'ArticleWords' may cause cycles or multiple cascade paths. 
Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

How can I change the code in order to read the Word twice?

LEAVE A COMMENT