Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2008中的C#、实体框架和删除子寄存器_C#_Sql Server_Entity Framework_Cascading Deletes_Soft Delete - Fatal编程技术网

SQL Server 2008中的C#、实体框架和删除子寄存器

SQL Server 2008中的C#、实体框架和删除子寄存器,c#,sql-server,entity-framework,cascading-deletes,soft-delete,C#,Sql Server,Entity Framework,Cascading Deletes,Soft Delete,我知道在SQL Server中,当我删除表中的父行时,我可以使用delete on cascade,但在某些地方,我读到最好在应用程序(存储库)中实现此逻辑,而不是在SQL Server中实现delete on cascade 所以我有两个问题。首先,如果我不在SQLServer中使用on-delete-cascade,那么如何使用实体框架解决这种情况 用户A将父寄存器及其子寄存器添加到上下文中 用户B向父寄存器添加新的子项。因此,用户A在上下文中没有此子级 用户A删除在其上下文中加载的父级和所

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

所以我有两个问题。首先,如果我不在SQLServer中使用on-delete-cascade,那么如何使用实体框架解决这种情况

  • 用户A将父寄存器及其子寄存器添加到上下文中
  • 用户B向父寄存器添加新的子项。因此,用户A在上下文中没有此子级
  • 用户A删除在其上下文中加载的父级和所有子级。这些子项不包括用户B添加的新子项
  • 实际上,没有问题,当用户A尝试删除父对象时,引用完整性会出现异常,需要加载其所有子对象并重试

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

    如果我在SQLServer中使用级联删除,这个问题就不存在了,所以我认为这是一个不错的选择

    因此,我的第二个问题是,在SQL Server(或其他数据库)中使用delete cascade是一个好主意,还是在业务逻辑(存储库)中实现这种情况更好


    谢谢。

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

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

    • 您喜欢自动删除吗?然后在删除级联时使用

    • 或者您更愿意完全控制这些情况,以便准确地知道删除的时间和内容?然后在您自己的自定义代码中实现它

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