我应该编写删除操作处理还是让级联完成这项工作?
Should I write removal operation handling or let cascade do the job?
我正在使用 Entity Framework 6.0.1 Code-First
方法并且我正在努力从数据库中删除我的对象。
我已将 Delete on Cascade
规则设置为 true
0..1-N
关系:
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 约定指定自动应用级联(),我从对象列表中删除元素):
//One entity is a reference to another entity of another type of
//RootEntity.
ctx.OneEntities.Remove(RootEntity.OneEntity);
对于 N-N
关系,我清理对象列表:
//No context removal operation here.
RootEntity.ManyToManyEntities.Clear();
现在,虽然这行得通,但我觉得我做错了事或在最佳处理方面应用了不必要的操作。
我对重构的第一个想法是:
1) 从 1-N 关系中删除任何上下文删除代码,因为级联可能会完成这项工作。
2) 在可选的 1-1 关系上应用级联。
3) 删除 N-N 关系的任何列表间隙,因为这应该自动完成。
我应该继续那些想法,还是整个代码都可以进行这种处理?是否有更好的替代策略来移除对象?我的缺点是级联可能会导致不必要的副作用,这取决于所使用的数据库支持什么。
如果您在数据库中配置了正确的关系,级联删除将自动发生 - sql 将自动执行。因此,在那一刻之后子实体将不存在,如果您尝试另一个请求,您将没有任何可删除的内容。
我使用 EF 6 'code first' 并定义了适当的关系,并且我只使用父项的一个删除 - 其他所有内容都会自动删除。父子关系的规则建立在数据库模式中,SQL 服务器完成这项工作,我们可以认为这是安全的。
我正在使用 Entity Framework 6.0.1 Code-First
方法并且我正在努力从数据库中删除我的对象。
我已将 Delete on Cascade
规则设置为 true
0..1-N
关系:
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 约定指定自动应用级联(
//One entity is a reference to another entity of another type of
//RootEntity.
ctx.OneEntities.Remove(RootEntity.OneEntity);
对于 N-N
关系,我清理对象列表:
//No context removal operation here.
RootEntity.ManyToManyEntities.Clear();
现在,虽然这行得通,但我觉得我做错了事或在最佳处理方面应用了不必要的操作。
我对重构的第一个想法是:
1) 从 1-N 关系中删除任何上下文删除代码,因为级联可能会完成这项工作。
2) 在可选的 1-1 关系上应用级联。
3) 删除 N-N 关系的任何列表间隙,因为这应该自动完成。
我应该继续那些想法,还是整个代码都可以进行这种处理?是否有更好的替代策略来移除对象?我的缺点是级联可能会导致不必要的副作用,这取决于所使用的数据库支持什么。
如果您在数据库中配置了正确的关系,级联删除将自动发生 - sql 将自动执行。因此,在那一刻之后子实体将不存在,如果您尝试另一个请求,您将没有任何可删除的内容。
我使用 EF 6 'code first' 并定义了适当的关系,并且我只使用父项的一个删除 - 其他所有内容都会自动删除。父子关系的规则建立在数据库模式中,SQL 服务器完成这项工作,我们可以认为这是安全的。