实体框架 - 重新排序元素

时间:2017-02-24 12:23:41

标签: sql sql-server entity-framework-6

我只是想改变订单'两个元素的值,我有以下代码:

        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键时,它会抛出错误。奇怪的行为,但按原样。

如何正确解决这个问题?

1 个答案:

答案 0 :(得分:2)

必须在每一行更新时遵守唯一约束,而不仅仅是在事务完成时。尝试重新排序行需要仔细的算法。为了更新一行以获得所需的“订单”X,您必须首先确保X是免费的(即没有行已经有此订单)。如果一行已经有了这个所需的顺序,你必须通过将其更新为“空闲”值将其移出这个“插槽”(我作为练习离开,你会找到这样一个'免费'值)。在更新“订单”之前,将其应用于每一行。

删除所有行然后将它们插回到所需的“顺序”中会更简单

话虽如此,很多原因导致您不希望在列中保留“顺序”。仅提一个,你必须处理差距。