我的实体是这样的:
public class Foo
{
public int Id { get; set; }
public int Bar { get; set; }
}
Bar有一个独特的索引。
在我的代码中,我得到两个Foo对象:
object 1: { Id: 1, Bar: 1}
object 2: { Id: 2, Bar: 2}
我需要做的是逐个交换:
object 1: { Id: 1, Bar: 2}
object 2: { Id: 2, Bar: 1}
并在交易中更新此内容。 但是当我这样做时,我得到一个类似的错误:
Cannot insert duplicate key row in object 'dbo.Episode' with unique index 'IX_Id_Season_Number'. The duplicate key value is (2f649a95-0a03-e511-9751-0090f5a7af27, 3, 1).
The statement has been terminated.
我该怎么做?
答案 0 :(得分:1)
您需要对其中一个对象的其他更新进行额外更新,其中Bar
设置为满足约束的某个虚拟值,因为约束是按更新而不是每个事务计算的。这是一些伪代码:
object 1: { Id: 1, Bar: 2}
object 2: { Id: 2, Bar: -1} // or some other dummy value
save
object 2: { Id: 2, Bar: 1}
save
由于您将所有内容都放在事务中,因此如果出现问题,您不必担心数据库会以中间状态结束。
查看强>