简单地说,我正在尝试更新相关实体列表;它们具有复合主键和附加约束(一种有序列应该是唯一的,类似于RowNumber)。现在,当对集合进行更复杂的编辑时,我不能只对每一行发出更新,因为违反了约束 - 例如,重新排序具有连续RowNumbers的两个实体(让我们暂时搁置该约束的有效性,那是不是重点)。
所以我想,在这种情况下很容易,我只是删除实体并重新创建它们。除了EF似乎检测到删除后删除相同的实体(基于其主键保持不变),因此它将delete + insert转换为更新。在确定新旧实体分别处于已删除和添加的状态之后,至少就是我在探查器中看到的内容。
通常我会说这是一件非常合乎逻辑的事情,但是......有没有办法改变这种行为?这真的发生了什么,还是我错过了什么?
答案 0 :(得分:1)
最后,我被迫假设这确实是正在发生的事情,而且作为一种优化......它有点合理。我改变了我的数据库模型,总是使用代理键(这就是EF无论如何最好),这可以防止它将删除和插入的实体识别为完全相同的东西,这意味着删除+插入不会被更新替换。我认为这并不算太糟糕,即使它确实意味着代理键会随着每次编辑而不断增加。