我需要在实体框架应用程序中实施“ shift 逐年”操作。
为简化起见,我们假设我有一个实体/表,其外键 FK 到其他表和 YEAR (int,int)。用户可能会将实体年份转移到未来,因此我需要将数据从2017年复制到2018年等等。
数据库中存在一个限制,即该对(FK,YEAR)必须唯一。
当我在内存中执行“shift”并使用 SaveChanges 将更改发送到数据库时,我收到数据库中的错误,表示我违反了唯一约束。我想它正在尝试逐行执行更新,因此违规。
如果按年份降序对集合进行排序(因此,如果逐行发送行不会发生重复),则会发生同样的错误。
我的解决方法是删除旧数据,插入新数据,但我认为可能有更清洁的解决方案......
答案 0 :(得分:0)
我通过反转订单并在修改后逐项保存来解决问题。运行这么多SaveChanges并不是很干净,但是整个过程相当复杂并且使用了交易,所以这不是什么大问题。
我不得不做出一些更改,因为用户可以将岁月转移到过去或未来,在这种情况下我必须/不得颠倒这个顺序,但为了简化这个问题,让我们说它已经解决了,如果我< strong>反向订单并逐项保存。