我有一个表应该引用同一个表。但是当我尝试更新数据库架构时,它会抛出此错误:
当我尝试更新架构时,PMC 抛出此错误:
System.Data.SqlClient.SqlException (0x80131904): Introducing FOREIGN KEY constraint 'FK_Directory_Directory_SubOfId' on table 'Directory' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
我尝试将 ON DELETE 设置为 CASCADE 但没有任何结果,仍然是相同的错误。我不知道如何设置“NO ACTION”,因为映射不提供此选项。
这个怎么办?
实体:
public class Directory : BaseEntity
{
public int ID { get; set; }
public int? SubOfId { get; set; }
[ForeignKey("SubOfId")]
public Directory SubOf { get; set; }
public virtual ICollection<ImageDirectory> ImageDirectory { get; set; }
}
模型构建器:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
...
builder.Entity<Directory>().HasOne(e => e.SubOf).WithOne().HasForeignKey<Directory>(a => a.SubOfId).OnDelete(DeleteBehavior.Cascade);
}
最佳答案
此异常不是由于自引用造成的。当一个实体可以通过多个级联路径删除时,就会出现这种情况。根据您提供的代码,我最好的猜测是 ImageDirectory
发生的事情以及其中的关系实际上是问题的根源。
总而言之,您需要研究您的对象图,以了解删除一种实体类型可能会在何处导致多个级联。然后,您需要关闭其中一些级联才能继续。不幸的是,如果无法看到所有实体以及它们之间的关系,就没有什么可以帮助您的了。
关于c# - EF Core - 自引用实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49131041/