C# 我应该写删除操作处理还是让cascade来做这项工作?

C# 我应该写删除操作处理还是让cascade来做这项工作?,c#,entity-framework,refactoring,code-first,C#,Entity Framework,Refactoring,Code First,我正在使用entityframework6.0.1code-First方法,我正在从数据库中删除我的对象 我已将0..1-N关系的Delete on Cascade规则设置为true: HasRequired(i => i.OneEntity).WithMany(v => v.ManyEntities). WillCascadeOnDelete(true); 现在,在我的删除方法中,我执行以下操作: 对于1-N关系,我从上下文中删除了相关对象: //OneEntity is

我正在使用
entityframework6.0.1code-First
方法,我正在从数据库中删除我的对象

我已将
0..1-N
关系的
Delete on Cascade
规则设置为
true

HasRequired(i => i.OneEntity).WithMany(v => v.ManyEntities).
    WillCascadeOnDelete(true);
现在,在我的删除方法中,我执行以下操作:

对于
1-N
关系,我从上下文中删除了相关对象:

//OneEntity is an entity that contains a list of referenced entities
//of another type.
RootEntity.OneEntity.ManyEntities.ForEach(be  => ctx.OtherElements.Remove(be));
对于
0..1-1
关系,如果可选,我将从对象列表中删除元素(根据需要,EF约定指定自动应用级联()):

对于
N-N
关系,我清理对象列表:

//No context removal operation here.
RootEntity.ManyToManyEntities.Clear();
现在,虽然这样做有效,但我感觉我做错了事情,或者在最佳处理方面应用了不必要的操作

我对重构的第一个想法是:

1) 从1-N关系中删除任何上下文删除代码,因为级联可以完成这项工作

2) 对可选的1-1关系应用级联

3) 删除N-N关系的任何列表清除,因为这应该自动完成


我应该继续这些想法,还是整个代码都适合这种处理?有没有更好的方法来移除物体?我的缺点是级联可能会导致不必要的副作用,这取决于所使用的数据库支持什么。

如果在数据库中配置了正确的关系,级联删除将自动发生-sql将自己完成。因此,在那一刻之后,子实体将不在那里,并且如果您尝试使用另一个请求,您将没有任何可删除的内容

我使用EF 6“代码优先”,并定义了正确的关系,我只使用一次删除父项-其他所有内容都将自动删除。父子关系的规则是在数据库模式中建立的,SQLServer执行这项工作,我们可以考虑这个安全性。
//No context removal operation here.
RootEntity.ManyToManyEntities.Clear();