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);