2012-02-14 33 views
0

我有下面的代碼來模擬一個老闆他的狗賣給別人,狗得到一個新的名字:不一致的對象狀態錯誤在實體框架時保存

public void ChangeOwner(int oldOwnerID, int newOwnerID, int dogID, string newDogName) 
{ 
    var oldOwner = _objectContext.People.FirstOrDefault(x => x.ID == oldOwnerID); 
    oldOwner.DogID = null; 

    var newOwner = _objectContext.People.FirstOrDefault(x => x.ID == newOwnerID); 
    newOwner.DogID = dogID; 

    var dog = _objectContext.Dogs.FirstOrDefault(x => x.ID == dogID); 
    dog.Name = newDogName; 

    _objectContext.SaveChanges(); 
} 

該代碼會拋出以下錯誤:

其他信息:對數據庫的更改被成功提交,但在更新對象上下文時發生錯誤。 ObjectContext可能處於不一致的狀態。內部異常消息:由於對象的鍵值與ObjectStateManager中的另一個對象衝突,因此AcceptChanges無法繼續。在調用AcceptChanges之前確保鍵值是唯一的。

爲什麼這個錯誤發生的歷史,我能做些什麼來解決這個問題?

回答

4

你可以看看你的表定義/創建和看看如果您添加或分配一個主鍵和設置(是一種身份)屬性是

如果你得到後一個錯誤...刪除該實體,並重新創建它,並應該解決問題,但這聽起來像一個主要關鍵問題。

+0

我必須設置爲我的EDMX文件的身份我所有的主鍵,所以我刪除的問題,實體和補充回來,現在它的工作。謝謝你的幫助!這是讓它工作的最奇怪的方式! – Halcyon 2012-02-14 18:44:12

+0

我知道,但好處是,我給你一個非常快速解決,我很高興,它實際上爲你工作多..我花了2小時試圖獲得另一OP不拿東西的時候,忽然在我的建議打我只是回去做我的問題,它的工作..大聲笑我很高興我可以幫忙 – MethodMan 2012-02-14 18:46:35

1

我自己得到這個問題,上述答案是完全正確的說這是一個主鍵問題,但作爲ASP.NET MVC的新手,我不知道如何實現該解決方案。

因此,對於那些ASP.NET MVC n00bs像我希望看到一些代碼,什麼工作對我來說誰:

我的問題是,在我的模型中的關鍵不匹配SQL中的KEY表。

EG。我的主鍵在我的表中的'Event_Question_ID'上。但在我的模型中,它在不同的領域,EventID。

所有我必須做的是移動的關鍵正確的字段在我的模型

型號:

[Key] 
public int Event_Question_ID { get; set; } 

注:[Key]需要using System.ComponentModel.DataAnnotations;

我希望這有助於有人出來!