我只是想改变订单'两个元素的值,我有以下代码:
int tmpItemOrder = item1.Order;
item1.Order = item2.Order;
item2.Order = tmpItemOrder;
await _db.SaveChangesAsync();
但我得到了唯一的密钥问题(订单是唯一密钥)
{"违反UNIQUE KEY约束' IX_EscortItems'。无法插入 对象' dbo.EscortItems'中的重复键。重复的键值是 (2,20)。\ r \ n声明已经终止。"}
据我所知,当系统尝试在事务中设置一个dublicate键时,它会抛出错误。奇怪的行为,但按原样。
如何正确解决这个问题?
答案 0 :(得分:2)
必须在每一行更新时遵守唯一约束,而不仅仅是在事务完成时。尝试重新排序行需要仔细的算法。为了更新一行以获得所需的“订单”X,您必须首先确保X是免费的(即没有行已经有此订单)。如果一行已经有了这个所需的顺序,你必须通过将其更新为“空闲”值将其移出这个“插槽”(我作为练习离开,你会找到这样一个'免费'值)。在更新“订单”之前,将其应用于每一行。
删除所有行然后将它们插回到所需的“顺序”中会更简单 。
话虽如此,很多原因导致您不希望在列中保留“顺序”。仅提一个,你将必须处理差距。