Entity framework core 删除子实体时删除父实体。。。寻找更好的方法(如果有)

Entity framework core 删除子实体时删除父实体。。。寻找更好的方法(如果有),entity-framework-core,linq-to-entities,entity-framework-core-3.1,Entity Framework Core,Linq To Entities,Entity Framework Core 3.1,我有一个地址实体: public Address { public Int32 Id { get; set; } public Collection<User> Users { get; set; } public Collection<Book> Books { get; set; } } 当我删除一本书时,我需要删除它的地址 当我删除一个用户时,我也在删除它的书籍(我有delete Cascade),所以我需要同时删除用户地址和它的书籍地址 删除用户或书

我有一个地址实体:

public Address {
  public Int32 Id { get; set; }
  public Collection<User> Users { get; set; }
  public Collection<Book> Books { get; set; }
}
当我删除一本书时,我需要删除它的地址

当我删除一个用户时,我也在删除它的书籍(我有delete Cascade),所以我需要同时删除用户地址和它的书籍地址

删除用户或书籍时删除相应的地址与级联删除相反

因此,我创建了以下查询,在删除用户或书籍后运行该查询:

    IQueryable<Address> addresses = _context.Addresses
      .Where(x => 
        !(_context.Users.Any(y => y.AddressId == x.Id)) &&
        !(_context.Books.Any(y => y.AddressId == x.Id));

    _context.RemoveRange(addresses);
IQueryable地址=\u context.addresses
.其中(x=>
!(_context.Users.Any(y=>y.AddressId==x.Id))&&
!(_context.Books.Any(y=>y.AddressId==x.Id));
_上下文。删除范围(地址);
因此,我正在删除用户或图书表中不存在的
Id
地址

它正在工作,我正在将它应用到2个以上的表中,因为还有几个表使用了地址

问题

  • 有没有更好的方法来改进我的查询

  • 有没有更好的方法


  • 我已经读了两遍你的问题,发现你想要做的可能是一个严肃的设计。请再考虑一下这个设计。你的意思是什么?你能澄清一下吗。你会以不同的方式将地址表与另一个表联系起来吗?看起来整个设计一团糟。最好先告诉你的要求,展示你迄今为止所做的工作,然后问你真正想要的是什么!各方面都一团糟?我指出了我要找的:基本上,每个用户、书籍、商店……都可以有一个地址,或者没有关联的地址……例如,当一本书被删除时,它的地址应该被删除,因为已经没有书了。例如,当我删除一个用户时,它的所有书籍也应该被删除为此,我在用户和书籍之间进行了删除级联。但删除该用户及其书籍后,他们的地址将保留在数据库中。因此,我需要手动删除。请告诉我您的想法。
        IQueryable<Address> addresses = _context.Addresses
          .Where(x => 
            !(_context.Users.Any(y => y.AddressId == x.Id)) &&
            !(_context.Books.Any(y => y.AddressId == x.Id));
    
        _context.RemoveRange(addresses);