实体框架6 SaveChanges导致唯一约束异常

时间:2015-09-15 07:05:50

标签: c# entity-framework-6

我尝试在我的EF上执行SaveChanges()时,我遇到了一个唯一的约束违规行为。

有两列,IDOrder。唯一约束是在这两列上。

我正在更新订单(交换其中两个值)。

然而,当我SaveChanges()时,我得到一个DBUpdateExcception说我违反了这个独特的约束 - 但我还没有! 我刚刚交换了订单

Name | ID | Order
BH   | 49 | 1
JK   | 49 | 2

所以在代码中,它现在看起来像这样(我已经在调试器中检查了EF)

Name | ID | Order
BH   | 49 | 2
JK   | 49 | 1

正如我所说,当我SaveChanges()时,我得到了一个例外。

我不知道我的模型在Visual Studio 2015中是否存在问题(必须设置属性或其他内容以允许更新?)。在我看来,问题是"它"没有正确地进行更新。

感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

EntityFramework一次更新一行。 因此,通过切换两个对象的Order值并调用SaveChanges()它首先触发这样的内容:

UPDATE TABLENAME SET [Order] = 2 WHERE [TABLENAME].[ID] = 49 AND [TABLENAME].[Order] = 1

如果要执行此更新,表中将有两行在唯一约束中具有相同的值。这就是你得到错误的原因。