假设该表有以下2行:
ID | SortOrder| Bom_Fk
1 | 1 | 122
2 | 2 | 122
现在,我将以下行更新为:
ID | SortORder| Bom_Fk
1 | 2 | 122
2 | 1 | 122
我只是在反转行项目的SortOrder。
请注意,SortOrder不为null,并具有唯一约束条件。
当尝试从EF core更新时,这会在更新第一行项目时抛出唯一约束错误,因为第二行项目已经在数据库中具有2的排序顺序。所以我考虑使用UpdateRange(..)进行批量更新,但是这会引发如下所述的错误。
由于在要保存的数据中检测到循环依赖关系,因此无法保存更改:'LineItem [Modified] <-\r\nIndex { 'BomFk', 'SortOrder'} LineItem [Modified] <-\r\nIndex { 'BomFk', 'SortOrder' } LineItem [Modified]。 要显示其他信息,请调用“DbContextOptionsBuilder.EnableSensitiveDataLogging”。
用于更新此表的代码...
lineItemsToUpdate.Add(lineItem);
context.LineItems.UpdateRange(lineItemsToUpdate);
我计划将SortOrder设置为null,并确保它不是从代码中的null值...
这样我就可以更新所有具有null值的LineItems,然后再用新值更新。(我还没有尝试过这个方法,因为在唯一约束条件下使用null并不是一个好主意,但这是我计划尝试的解决方法)
是否有任何方法可以使'Sort Order'列保持为非空唯一列?