当前位置: 首页 > 知识库问答 >
问题:

在表上引入外键约束可能会导致循环或多个级联路径

祝叶五
2023-03-14

我已经发现了许多其他类似的问题,但我不知道为什么它会在我的实体上这样做。用简单的英语表示如下。三个实体:账户、现场和合同。一个帐户可以有多个站点。一个帐户可以有多个合同。一个站点可以有多个合同。因此,在某些情况下,您可以将合同附加到站点,然后将其附加到帐户,或者将合同直接附加到帐户。

我假设我得到了这一点,因为删除合同有两种可能的级联,一种是在删除帐户时级联,另一种是直接附加到帐户,另一种是在删除站点时级联。

我认为由于合同中不需要Account tId或SiteId,这不应该触发错误。我希望能够做的是将合同附加到站点(以及随后的帐户)或将合同直接附加到帐户-但我仍然希望保持数据库参照完整性。

Introducing FOREIGN KEY constraint 'FK_dbo.Contract_dbo.Site_SiteId' on table 'Contract' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

我的类/实体:

public partial class Account
{
    public int Id { get; set; }

    [Display(Name = "Account Name")]
    [Required]
    [MinLength(3, ErrorMessage = "The Account Name should be at least 3 characters")]
    [MaxLength(40, ErrorMessage = "The Account Name should be no more than 40 characters")]
    [Remote("IsAccountNameAvailable", "Helper", ErrorMessage = "This Account name already exists, please try another name")]
    public string AccountName { get; set; }

    [ScaffoldColumn(false)]
    [Display(Name = "Date Account Added")]
    public DateTime DateAdded { get; set; }

    public virtual ICollection<Site> Sites { get; set; }
    public virtual ICollection<Contract> Contracts { get; set; }
}
public partial class Site
{
    public int Id { get; set; }

    [Required(ErrorMessage = "A site must be attached to an account - please specify an account")]
    [Display(Name = "Parent Account")]
    public int AccountId { get; set; }

    [Display(Name = "Site Name")]
    [Required]
    [MinLength(3, ErrorMessage = "The Site Name should be at least 3 characters")]
    [MaxLength(40, ErrorMessage = "The Site Name should be no more than 40 characters")]
    public string SiteName { get; set; }

    [ScaffoldColumn(false)]
    public DateTime DateAdded { get; set; }

    [Required]
    [Display(Name = "Primary Site")]

    //[Remote("IsThereAlreadyAPrimarySite", "Helper", AdditionalFields = "AccountId", ErrorMessage = "There is already a primary site set for this account", HttpMethod = "POST")]
    public bool PrimarySite { get; set; }

    [Display(Name = "Site Notes")]
    [Column(TypeName = "text")]
    public string SiteNotes { get; set; }

    public virtual Account Account { get; set; }

    public virtual ICollection<Contract> Contracts { get; set; }

}
public partial class Contract
{
    public int Id { get; set; }

    public int AccountId { get; set; }
    public int SiteId { get; set; }

    [Display(Name = "Contract Type")]
    [Required]
    public int ContractTypeId { get; set; }

    public virtual Account Account { get; set; }

    public virtual Site Site { get; set; }

    public virtual ContractType ContractType { get; set; }

}

共有1个答案

汪安宁
2023-03-14

在您的DbContext文件覆盖方法OnModelCreating中,必须将至少一个关系配置为在删除时不级联。删除时必须显式处理该关系

protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
    base.OnModelCreating( modelBuilder );

    modelBuilder.Entity<Contract>()
        .HasRequired( c => c.Site)
        .WithMany( s => s.Contracts )
        .WillCascadeOnDelete( false );
}
 类似资料:
  • 我收到了这个错误 在表“区域”上引入FOREIGN KEY约束“FK_dbo.Regions_dbo.Countries_CountryId”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。无法创建约束。请参阅以前的错误。 我想知道这是否意味着我的数据库设计不好?我听说你关掉了级联之类的东西,但

  • 问题内容: 尝试向表中添加约束时出现问题。我得到了错误: 在表“ Employee”上引入FOREIGN KEY约束“ FK74988DB24B3C886”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 我的约束是在一个表和一个表之间。该表包括,,,和。的具有多个字段的标号,从而可以存在对于每

  • 我正在尝试更新数据库,但出现此错误。这件事我已经纠结了一段时间,不太清楚到底发生了什么。 引入外键约束“FK\u dbo”。注释\u dbo。表“Comments”上的Users\u UserId可能导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他外键约束。无法创建约束或索引。请参阅以前的错误。 这是我的用户类: 下面是我的评论

  • 给大师们的一个快速问题。 我有2个EF模型课程: 基本上,我想先在代码中创建一对多关系。 但当我尝试这样做时,我会出现以下错误: 引入外键约束“FK\u dbo”。Teachers\u dbo。表“教师”上的“Schools\u SchoolId”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他外键约束。 我哪里做错了?

  • 我已经和这件事纠缠了一段时间,不太清楚到底发生了什么。我有一个卡实体,它包含两个边(通常是2个),并且卡和边都有一个舞台。我正在使用EF Codefirst迁移,迁移失败,出现以下错误: 在表“Sides”上引入外键约束“FK_dbo.Sides_dbo.Cards_cardd”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束。 这是我的卡实体:

  • 问题内容: 从实体框架代码优先生成数据库时,出现此错误。 我没有看到脚本有任何问题: 每个参考都指向不同的表! 每个表上只能有一个删除级联吗? 如果我有3个表:Users,Posts和Votes。 与关系: Post.AuthorId-> User.Id投票.PostId-> Post.Id Votes.UserId-> User.Id SQL正确生成错误,因为如果删除帖子,我将有2条投票路径:用