首页 > 解决方案 > 在表上引入 FOREIGN KEY 约束可能会导致循环或多个级联路径,如何解决?

问题描述

我必须使用 Id、UserId、ProviderId、CityId 属性创建新的 ProviderAdmins 表。我在 db 中有很多表,但现在只关注这 4 个。当我删除 Provider 或 User ProviderAdmins 时也应该删除。 我收到以下错误:在表“ProviderAdmins”上引入 FOREIGN KEY 约束“FK_ProviderAdmins_Providers_ProviderId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束或索引。请参阅以前的错误。 我该如何解决?

在此处输入图像描述

public class User 
{
   public string Id { get; set; }
   public virtual ProviderAdmin ProviderAdmin { get; set; }
}
public class Provider 
{
  public long Id { get; set; }
  public virtual ICollection<ProviderAdmin> ProviderAdmins { get; set; }
}
public class City 
{
  public long Id { get; set; }
  public virtual ICollection<ProviderAdmin> ProviderAdmins { get; set; }
}
public class ProviderAdmins 
{
  public long Id { get; set; }

  [Required]
  public string UserId { get; set; }

  public virtual User User { get; set; }

  [Required]
  public long ProviderId { get; set; }

  public virtual Provider Provider { get; set; }

  public long CityId { get; set; }

  public virtual City City { get; set; }
}

builder.Entity<ProviderAdmin>()
    .HasOne(x => x.City)
    .WithMany(x => x.ProviderAdmins)
    .HasForeignKey(x => x.CityId)
    .OnDelete(DeleteBehavior.NoAction);

builder.Entity<ProviderAdmin>()
    .HasOne(x => x.Provider)
    .WithMany(x => x.ProviderAdmins)
    .HasForeignKey(x => x.ProviderId)
    .OnDelete(DeleteBehavior.Cascade);

builder.Entity<ProviderAdmin>()
    .HasOne(x => x.User)
    .WithOne(x => x.ProviderAdmin)
    .HasForeignKey<ProviderAdmin>(x => x.UserId)
    .OnDelete(DeleteBehavior.Cascade);

标签: .netentity-frameworkasp.net-core

解决方案


推荐阅读