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

级联删除EF核心表和交叉表

林俊晖
2023-03-14

我有一个地址模型,它适用于我系统中的所有模型,如下所示:

class Person
{
    public IList<PersonAddress> PersonAddresses { get; set; }

    public Person()
    {
        PersonAddresses = new List<PersonAddress>();
    }
}

class PersonAddress
{
    public int PersonId { get; set; }
    public Person Person { get; set; }

    public int AddressId { get; set; }
    public Address Address { get; set; }
}

class Address 
{
   //...
}

在OnModelCreating中:

builder.Entity<PersonAddress>()
            .HasKey(pa => new { pa.PersonId, pa.AddressId });

它的工作非常好!我唯一的问题是关于级联删除。如何设置此方案:

  • 删除某人时,级联删除PersonalAddress和Addresses
  • 删除地址时,级联删除PersonalAddress而不是Person

目前我看到删除Person会删除Person地址(但不会删除相关地址)。

我并不是在抱怨这种行为,但我不清楚如何进行设置,以便根据需要自动级联删除实体,或者是否需要手动执行删除。

感谢您的时间!

共有1个答案

牛枫
2023-03-14

WillCascadeOnDelete(true)WillCascadeOnDelete(false)扩展与fluent api一起使用。

builder.Entity<PersonAddress>()
            .HasKey(pa => new { pa.PersonId, pa.AddressId })
            .WillCascadeOnDelete(true);
 类似资料:
  • 我有一个使用ef核心代码优先方法构建的项目的审计机制。我已经在“OnModelCreating”函数中为一些表设置了“deleteBhavior”属性以级联。当我删除一个实体时,另一个实体会通过级联删除行为自动删除。现在一切都很好,我需要获取所有已删除的实体,但我不能。ChangeTracker不包含级联删除的实体。如何获取级联删除的值?有没有办法做到这一点?

  • 我目前对EF Core有一些问题。我有一些需要删除的数据,我正在努力查看流畅的API是如何工作的,正是关于函数。 考虑到微软自己网站的经典博客/帖子场景,我想知道到底是什么实体,OnDelete()是“目标”(因为没有更好的词),在某些情况下,它似乎是博客,在另一些情况下,是帖子。是否可以从两侧定义级联删除(即当父博客被删除时,帖子被删除),如果是这样,我认为代码应该如下所示: <代码>模型。实体

  • 我需要了解全局禁用EF Core 2中级联删除的方法。感谢您的帮助。 在EF 6. x中,我们使用以下代码来禁用和实现上的级联删除:

  • 我的问题和这个差不多。 ASP。Net Core与EF Core和CosmosDB-身份问题 提供的答案不起作用。这会产生其他问题。当我从升级我的应用程序时,这些错误开始出现。NET Core 3.1 to。净5。降级应用程序使所有错误都消失了。显然,这个问题与efcore 5中引入的对cosmos的乐观并发支持有关。 https://docs.microsoft.com/en-us/ef/cor

  • 升级核心3.0后,无法在包管理器中添加迁移。这是我的错误

  • SQLAlchemy 1.4 / 2.0 Tutorial 此页是 SQLAlchemy 1.4/2.0教程 。 上一次: 使用核心或ORM选择行 |下一步: |next| 使用核心更新和删除行 到目前为止,我们已经讨论过 Insert ,这样我们就可以将一些数据放入我们的数据库中,然后花费大量时间在 Select 其处理用于从数据库检索数据的广泛的使用模式。在本节中,我们将介绍 Update 和