删除多对多关系中的实体
本文关键字:实体 关系 删除 | 更新日期: 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端级联删除。
如果删除一个帖子应该删除所有包,你的模型是否正确建模?