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?