我在 .net6 项目中工作。我有很多相互关联的表。 我试图在删除外键时将两个表(投票和评论)之间的关系指定为删除时的级联但是在尝试更新数据库时出现以下错误:
引入 FOREIGN KEY 约束 'FK_Upvotes_Reviews_ReviewId' table 'Upvotes' 可能会导致循环或多个级联路径。指定开启 DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他FOREIGN KEY 约束。无法创建约束或索引。见上一个 错误。
,即使 upvotes 不是任何其他表中的外键?
投票表的配置:
//Upvote table
{
builder.HasKey(r => new { r.UserId, r.ReviewId });
builder.HasOne(up => up.User)
.WithMany(up => up.Upvotes)
.HasForeignKey(up => up.UserId)
.OnDelete(DeleteBehavior.SetNull);
builder.HasOne(up=>up.Review)
.WithMany(up=>up.Upvotes)
.HasForeignKey(up=>up.ReviewId)
.OnDelete(DeleteBehavior.Cascade);
}
所有其他表的配置: 回顾表:
//Review Table
{
builder.HasKey(r => r.ReviewId);
builder.HasOne(r=>r.User)
.WithMany(r=>r.Reviews)
.HasForeignKey(r=>r.UserId)
.OnDelete(DeleteBehavior.Cascade);
}
评级表:
//Rating Table
{
builder.HasKey(r => new {r.UserId,r.CompanyId});
builder.HasOne(r => r.User)
.WithMany(r => r.Ratings)
.HasForeignKey(r => r.UserId)
.OnDelete(DeleteBehavior.SetNull);
}
公司表:
//companyTable
{
builder.HasKey(c => c.CompanyId);
builder.HasMany(c=>c.Reviews)
.WithOne(c => c.Company)
.HasForeignKey(c => c.CompanyId)
.OnDelete(DeleteBehavior.Cascade);
builder.HasMany(c => c.Salaries)
.WithOne(c => c.Company)
.HasForeignKey(c => c.CompanyId)
.OnDelete(DeleteBehavior.Cascade);
builder.HasMany(c => c.Ratings)
.WithOne(c => c.Company)
.HasForeignKey(c => c.CompanyId)
.OnDelete(DeleteBehavior.Cascade);
}