热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

约束可能导致循环或多个级联路径

如何解决《约束可能导致循环或多个级联路径》经验,为你挑选了1个好方法。

它是这样的:

public class ApplicationUser : IdentityUser
{
    // omitted for the sake of brevity...

    public string LastName { get; set; }
    public string FirstName { get; set; }

    public string Email { get; set; }
}

public class Invoice
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Index(IsUnique = true)]
    [Required]
    public int No { get; set; }

    [Required]
    public DateTime Created { get; set; }

    [Required]
    public string ManagerId { get; set; }
    public virtual ApplicationUser Manager { get; set; }

    public virtual ICollection Payments { get; set; }
}

public class InvoicePayment
{
    [Key]
    public Guid Id { get; set; }

    [Required]
    public int InvoiceId { get; set; }
    public virtual Invoice Invoice { get; set; }

    [Required]
    public DateTime Created { get; set; }

    [Required]
    public decimal Total { get; set; }

    public string Comment { get; set; }

    public virtual ICollection Participants { get; set; }
}

public class InvoicePaymentParticipant
{
    [Key]
    public Guid Id { get; set; }

    [Required]
    public Guid InvoicePaymentId { get; set; }
    public virtual InvoicePayment InvoicePayment { get; set; }

    [Required]
    public string ManagerId { get; set; }
    public virtual ApplicationUser Manager { get; set; }

    [Required]
    public decimal Part { get; set; }
}

然后我尝试Update-Database大喊:

在表'InvoicePaymentParticipants'上引入FOREIGN KEY约束'relationship_name'可能会导致>循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他> FOREIGN KEY约束。无法创建约束或索引。请参阅先前的错误。

我误解了多个级联路径的概念。

我不明白问题出在哪里,因为如果我们想删除经理,我们也希望他们的付款参与记录以及他们创建的任何发票都被删除。

您如何在给定的方案中解决此问题?



1> Hooman Bahre..:

当您在必需(或不可为空)属性上创建外键关系时,默认情况下会启用级联删除,请参阅EF必需关系

这里的问题是您有2个InvoicePaymentParticipantApplicationUser表的级联删除路径:

Path1: InvoicePaymentParticipant -> InvoicePayment -> Invoice -> ApplicationUser

Path2: InvoicePaymentParticipant -> ApplicationUser

这意味着,当您删除用户时,应删除以下记录:

路径1下的删除:

    用户被删除,删除他的发票

    发票被删除,删除相应的发票付款

    发票付款被删除,删除相应的发票付款参与者

路径2下的删除:

    用户被删除,删除他的发票付款参与者

Sql Server中不允许这样做。请参阅此页面以获取更多信息。

为了解决这个问题,你可以重新考虑你的表结构和删除外键路径之一InvoicePaymentParticipant,以ApplicationUser...

另一种方法是更改​​外键的级联删除行为,您可以删除[Required]其中一个属性的ManagerId属性,并且由于stringnullable类型,EF会在删除时将键设置为null。

您还可以更改EF默认行为并关闭级联删除


这是一个很好的建议,在我的应用程序中,我通常会禁用级联删除约定,并手动指定要允许级联方案的关系。考虑这一点,如果用户X支付了发票,而用户X被删除了,您是否真的希望发票也被删除?如果您允许删除财务记录,则很难平衡您的账目并维护财务历史记录。
推荐阅读
  • 本文介绍了一个SQL Server自定义函数,用于从字符串中提取仅包含数字和小数点的子串。该函数通过循环删除非数字字符来实现,并附带创建测试表、存储过程以演示其应用。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文介绍如何使用SAS根据输入数据集自动生成并执行SQL查询,其中CASE语句依据另一个数据集中的观测值动态调整。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • Oracle中NULL、空字符串和空格的处理与区别
    本文探讨了在Oracle数据库中使用NULL、空字符串('')和空格('_')时可能遇到的问题及解决方案。重点解释了它们之间的区别,以及在查询和函数中的行为。 ... [详细]
  • Oracle 数据导出为 SQL 脚本的详细步骤
    本文介绍如何使用 PL/SQL Developer 工具将 Oracle 数据库中的数据导出为 SQL 脚本,包括详细的步骤和注意事项。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 1.介绍有时候我们需要一些模拟数据来进行测试,今天简单记录下如何用存储过程生成一些随机数据。2.建表我们新建一张学生表和教师表如下:CREATETABLEstudent(idINT ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文介绍了解决在Windows操作系统或SQL Server Management Studio (SSMS) 中遇到的“microsoft.ACE.oledb.12.0”提供程序未注册问题的方法,特别针对Access Database Engine组件的安装。 ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • 本文详细介绍了MySQL数据库中的Bin Log和Redo Log,阐述了它们在日志记录机制、应用场景以及数据恢复方面的区别。通过对比分析,帮助读者更好地理解这两种日志文件的作用和特性。 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
author-avatar
没有结果的爱请你收好
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有