2012-02-14 17 views
0

を保存するとき、私は新しい名前を取得他の誰かに自分の犬を販売し、所有者と犬をシミュレートするために、次のコードを持っている:Entity Frameworkのには一貫性のないオブジェクト状態エラーに

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

あなたはそれ以降エラーが出る場合は、あなたのテーブル定義/作成を見て、あなたが追加かどうかを確認しますかはい

に主キーと設定(されるID)プロパティを割り当てることができます...削除この問題を解決するはずですが、これは主要なキー問題のように聞こえます。

+0

自分のプライマリキーがすべて自分のEDMXファイルのアイデンティティに設定されていたので、問題のエンティティを削除して元に戻しました。ご協力いただきありがとうございます!これはそれを働かせる最も奇妙な方法です! – Halcyon

+0

私は知っているが、良いことは、私はあなたに本当に迅速な修正を与えて、それは実際にあなたのために働いたことを幸せよりも..私は別のOPを取得しようと2時間を過ごした彼は私の提案ちょうど戻って、私が尋ねたことをして、それが働いた..LOLうれしい私は助けることができる – MethodMan

1

私はこの問題を自分で解決していますが、上記の答えはPRIMARY KEYの問題だと言っても間違いありませんがASP.NET MVCが初めてのので、ソリューションの実装方法は正確にはわかりませんでした。

だから、私のために働いたとどのようないくつかのコードを見たいのですが、私のようなものをASP.NET MVCのn00bs用:

私の問題だった私のモデルではKEYは、SQLでのKEYと一致しなかったこと表。

例:私のPRIMARY KEYは私のテーブルの 'Event_Question_ID'にあります。しかし私のMODELでは、それは別のフィールドEventIDにありました。注

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

私がしなければならなかったすべては私のモデルでは

モデルを正しいフィールドにKEYを移動した[Key]私は、これはそこに誰かに役立ちます願っていusing System.ComponentModel.DataAnnotations;

が必要です!

関連する問題