Savechange交换另一个索引

时间:2015-05-25 22:52:27

标签: entity-framework entity-framework-6

我的实体是这样的:

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.

我该怎么做?

1 个答案:

答案 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

由于您将所有内容都放在事务中,因此如果出现问题,您不必担心数据库会以中间状态结束。

查看