2015-05-25 45 views
0

我的實體交換一個指數就是這樣:Savechange另一個

public class Foo 
{ 
    public int Id { get; set; } 
    public int Bar { get; set; } 
} 

酒吧有一個唯一索引。

在我的代碼我得到兩個美孚對象:

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

對於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 

既然你把一個事務中的一切,你會不會擔心,如果出現錯誤數據庫處於中間狀態結束了。