删除多对多关系中的实体

本文关键字:实体 关系 删除 | 更新日期: 2023-09-27 18:06:09

我有以下EF 6.1实体:

public class Post {
  public Int32 Id { get; set; }
  public virtual ICollection<PostLocalized> PostsLocalized { get; set; }
}
public class PostLocalized {
  public Int32 Id { get; set; }
  public String Culture { get; set; }
  public virtual Post Post { get; set; }
  public virtual ICollection<Pack> Packs { get; set; }
}
public class Pack {
  public Int32 Id { get; set; }
  public virtual ICollection<File> Files { get; set; }
}
public class File {
  public Int32 Id { get; set; }
  public virtual Pack Pack { get; set; }
}

因此,在SQL中,我有以下表,在Delete上使用Cascade:

Post, PostLocalizaded, PostLocalized_Packs, Packs, Packs_Files, Files

注意:PostLocalized_Packs和Packs_Files是多对多关系表

当我删除一个Post时,它的postlocalized_records被删除,PostLocalized_Packs被删除。

但是Packs_Files和Files不是…我知道Packs_Files将在我删除包的那一刻被删除。

我怎么能,给定一个Post和它的postlocalization删除所有的包和文件与他们相关联,而不加载一切,特别是文件。

谢谢你,米格尔

删除多对多关系中的实体

不完全是回答,也不完全是评论,但是…

你说如果你删除Pack,那么Pack_Files和Files也被删除,因为级联删除。

考虑这个例子:

删除Post ->所有与Post相关的postlocalization和PostLocalized_Packs都被删除

这也应该删除与PostLocalized_Packs相关的包,对吗?它确实有,你有从Pack -> PostLocalized_Packs级联删除。然后,它将开始删除所有与通过级联删除删除的包相关的PostLocalized_Packs。

之后,它将跟踪与PostLocalized_Packs相关的Posts,这些Posts被从Packs端级联删除。

如果删除一个帖子应该删除所有包,你的模型是否正确建模?