C# 实体框架功能的澄清

C# 实体框架功能的澄清,c#,entity-framework,C#,Entity Framework,下面的代码应该做什么?在这段代码中添加included表的目的是什么,它应该级联删除与PersonId相关的JobType,还是只删除具有指定PersonId的人员 db.tblPerson.Remove(db.tblPerson.Include("tblJobType").FirstOrDefault(c => c.PersonId== PersonId)); 在这种情况下.Include要么是多余的,要么是非常糟糕的设计 多余的: .Include用于急切地加载相关实体(),因为这

下面的代码应该做什么?在这段代码中添加included表的目的是什么,它应该级联删除与PersonId相关的JobType,还是只删除具有指定PersonId的人员

db.tblPerson.Remove(db.tblPerson.Include("tblJobType").FirstOrDefault(c => c.PersonId== PersonId));

在这种情况下.Include要么是多余的,要么是非常糟糕的设计

多余的:

  • .Include用于急切地加载相关实体(),因为这会立即传递给.Remove函数,所以相关实体永远不会被使用,因此它是没有意义的
  • 如果这也是试图删除相关实体,那么这将独立于加载相关实体而发生。此效果由关系的级联删除设置确定
糟糕的设计:

  • 由于.Include将加载相关实体,因此需要在两个表之间进行连接。根据人员和工作类型之间的关系(如可选),这可能导致人员被排除在外(如无工作类型的人员)
结论


发布的代码只是删除具有指定PersonId的人员。.Include可能只是一个复制粘贴错误,在这里没有影响。如上所述,这不会导致由不同设置确定的级联删除。但是,您应该知道.Include的副作用。

您是否尝试过运行代码并分析结果?我刚刚尝试过,但这让我感到困惑,因为我仍然在表中看到相关的工作类型,这可能是因为另一个代码问题,我只是想确认我的理论理解。谢谢