我想实现一个逻辑删除仙境所有我的实体。所有都有一个IsDeleted布尔属性。我也想级联协会删除。我开始通过向datacontext添加实体的部分方法。Linq逻辑删除与协会
partial void DeleteQuestion(Question instance)
{
instance.IsDeleted = true;
ExecuteDynamicUpdate(instance);
foreach (var answer in instance.Answers)
{
DeleteAnswer(answer);
}
}
这会在ExecuteDynamicUpdate引发错误Incorrect syntax near the keyword 'WHERE'
。看看sql分析器,我可以看到set子句是空白的,它不记录IsDeleted = true;
作为一个变化。我检查了IsDeletedChanging事件,它确实被解雇了,但我猜这次更改集已经建立了。
我也尝试提交更改,而不是调用ExecuteDynamicUpdate,但这引发异常The operation cannot be performed during a call to SubmitChanges.
我看到相同的讨论here,唯一的分辨率为使用存储过程,我宁愿不做。
所以我想让我们问SO社区,并获得Google结果顶部的正确答案。这个话题似乎很少。
非常感谢。
有点偏离主题,但迭代所有答案并逐个删除它们会产生非常差的性能。您应该考虑批量删除它们。 – 2010-01-29 13:37:35
正确。当我找到更新的方法时,我会重构。 我初期尝试了db.Answers.DeleteAllOnSubmit(instance.Answers),但是这会引发“在调用SubmitChanges异常期间无法执行的操作” – madcapnmckay 2010-01-29 13:50:54