1

简单地说,我正在尝试更新相关实体的列表;它们具有复合主键和附加约束(一种序列应该是唯一的,例如 RowNumber)。现在,当对集合进行更复杂的编辑时,我不能只对每一行发布更新,因为会违反约束——例如,用连续的 RowNumbers 重新排序两个实体(让我们暂时搁置该约束的有效性,那就是不是重点)。

所以我想,在这种情况下很容易,我只需删除实体并重新创建它们。除了 EF 似乎检测到删除后插入了相同的实体(基于其保持不变的主键),因此它将删除+插入转换为更新。至少这就是我在绝对确定旧实体和新实体分别处于删除和添加状态之后使用探查器看到的内容。

通常我会说这是一件很合乎逻辑的事情,但是......有没有办法改变这种行为?这真的是发生了什么还是我错过了什么?

4

1 回答 1

1

最后,我被迫假设这确实是正在发生的事情,它作为一种优化是有意义的……有点。我将我的数据库模型更改为始终使用代理键(无论如何,这都是 EF 最适合的),这可以防止它将删除和插入的实体识别为完全相同的东西,这意味着删除+插入不会被更新替换。我想这还不错,即使这确实意味着代理键会随着每次这样的编辑而不断增加。

于 2013-06-21T09:38:46.880 回答