何时在 EF 中使用 WillCascadeOnDelete(false)?
Posted
技术标签:
【中文标题】何时在 EF 中使用 WillCascadeOnDelete(false)?【英文标题】:When to use WillCascadeOnDelete(false) in EF? 【发布时间】:2020-01-06 05:20:32 【问题描述】:我知道Cascade Delete in Entity Framework的用法和效果,我的项目中一般默认不使用。但是,我不确定在删除父记录后删除所有子记录是否是好的行为。删除父项后是否需要保留子记录。 WillCascadeOnDelete(false)
是否只用于保护子记录被误删?还是有其他情况需要使用WillCascadeOnDelete(false)
?
【问题讨论】:
【参考方案1】:答案是:“这取决于您的业务”
例如,您有两个表:Category 和 Product 具有一对多关系
如果您使用 WillCascadeOnDelete(true),则意味着您的产品没有类别就无法存在。
否则,说明您的产品不受类别影响。
有关更多详细信息,您可以尝试在此处https://***.com/a/31600062/7338888 阅读有关聚合、组合和关联之间区别的更多信息。 希望对您有所帮助。
【讨论】:
感谢您的回复。即使我不在 EF 中使用WillCascadeOnDelete(false)
,我在尝试删除父记录时也会遇到“DELETE 语句与 REFERENCE 约束冲突 ...”错误。在查看 Context 类时,我意识到我使用了modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
。那么,是不是也阻止了所有的表记录被级联删除,导致上面的错误呢?
有什么帮助吗?
嗯,这不是EF抛出的错误,这是数据库下的错误抛出,你能分享你的db结构吗?以上是关于何时在 EF 中使用 WillCascadeOnDelete(false)?的主要内容,如果未能解决你的问题,请参考以下文章
EF Code First Database Initializer和Migrations Confusion