0

我知道在 SQL Server 中,当我删除表中的父行时,我可以在级联上使用 delete,但在某些地方,我读到最好在应用程序(存储库)中实现此逻辑,而不是在 SQL Server 中级联删除。

所以我有两个问题。首先,如果我在 SQL Server 中不使用删除级联,如何使用 Entity Framework 解决这种情况。

  1. 用户 A 将父寄存器及其子寄存器添加到上下文中
  2. 用户 B 将一个新的孩子添加到父寄存器。所以用户 A 在上下文中没有这个孩子
  3. 用户 A 删除其上下文中加载的父级和所有子级。这些孩子不包括用户 B 添加的新孩子。

好吧,在实践中,没有问题,当用户A试图删除父级时,存在引用完整性异常,需要加载其所有子级并重试。

这对于 SQL Server 来说是一项额外的工作,因为它需要再次将所有寄存器发送给用户 A。

如果我在 SQL Server 中对级联使用 delete,则不存在此问题,因此我认为是一个不错的选择。

所以我的第二个问题是,在 SQL Server(或其他数据库)中使用删除级联是一个好主意,还是在业务逻辑(存储库)中实现这种情况更好?

谢谢。

4

1 回答 1

1

这是个人喜好问题 - 我听到了两种选择的有效论据。

什么对你来说更明显、更容易理解?

  • 你喜欢自动删除吗?然后使用ON DELETE CASCADE

  • 还是您更愿意完全控制这些情况以准确知道何时以及删除了什么?然后在您自己的自定义代码中实现它

没有对与错,没有“更好”或“更差”——更多的是关于你自己的个人偏好以及你对代码的感觉如何更舒服。

于 2012-12-16T12:43:33.243 回答