我有一个地址实体:
public Address {
public Int32 Id { get; set; }
public Collection<User> Users { get; set; }
public Collection<Book> Books { get; set; }
}
使用外键在许多实体(用户、书籍、...)中使用:
public User {
public Int32 Id { get; set; }
public Int32 AddressId { get; set; }
public Address Address { get; set; }
}
public Book {
public Int32 Id { get; set; }
public Int32 AddressId { get; set; }
public Int32 UserId { get; set; }
public Address Address { get; set; }
public User User { get; set; }
}
当我删除一本书时,我需要删除它的地址......
当我删除一个用户时,我也在删除它的书籍(我有删除级联),所以我需要删除用户地址和它的书籍地址。
删除用户或书籍时删除相应的地址与级联删除相反。
因此,我创建了以下查询,在删除用户或图书后运行该查询:
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);
所以我正在删除Id
用户或书籍表中不存在的地址。
它正在工作,我将它应用于超过 2 个表,因为地址用于更多。
问题
有没有更好的方法来改进我的查询?
有更好的方法吗?