实体框架功能的说明

本文关键字:说明 功能 框架 实体 | 更新日期: 2023-09-27 18:21:42

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

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

实体框架功能的说明

在这个例子中,.Include要么是多余的,要么是非常糟糕的设计。

多余:

  • .Include用于急切地加载相关实体(文档),因为它会立即交给.Remove函数,因此永远不会使用相关实体,因此它毫无意义
  • 如果这也是删除相关实体的尝试,那么这将独立于加载相关实体而发生。此效果由关系的"级联删除"设置决定

糟糕的设计:

  • 由于.Include将加载相关实体,因此需要在两个表之间使用JOIN。根据人员和工作类型之间的关系(例如可选),这可能导致人员被排除在外(例如没有工作类型的人员)

结论

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