2013-04-21 33 views
6

既存のエンティティを更新しようとしています。参照整合性制約違反が発生しました

public MamConfiguration_V1 Save(MamConfiguration_V1 item) 
{ 
    mMaMDBEntities.MamConfiguration_V1.Attach(item); 
    mMaMDBEntities.ObjectStateManager.ChangeObjectState(item, System.Data.EntityState.Modified); 
    mMaMDBEntities.SaveChanges(); 
    return item; 
} 

しかしAttachメソッドが例外をスローします:

私は、次のコードを持っている

参照整合性制約違反が発生しました:参照制約を定義するプロパティの値が間一貫していません関係の主体および従属オブジェクト

どうすればこの問題を解決できますか?

答えて

3

アイテムオブジェクトの定義は何ですか?そのコレクションの中には、他のエンティティとの現実関係を設定するものがいくつか存在します。すべてのコレクションをクリアして問題が解決するかどうかを確認できますが、この場合は外部キーの割り当てが失われています。しかしおそらくそれはあなたが問題を見つけるのを助けるかもしれません。

これはヒントになる可能性があります。私は、コンテキストに既存のエンティティを添付しようとすると、私は次の操作を実行するために使用します。

mMaMDBEntities.Entry<MamConfiguration>(item).State = System.Data.EntityState.Modified; 

あなたはそれをすべての時間を書き込むために必要を避けるために、System.Dataの使用を追加することができます。

これは、エンティティをあなたが望む状態で添付します。この場合は変更し、変更を追跡します。これは2行ではなく1行です。

8

itemに外部キーフィールドとナビゲーションプロパティとの関係があり、それらのフィールドに競合する値があるようです。これは、エンティティとその関連エンティティを読み込んで一方の関係を変更し、その末尾にModifiedとマークして保存しようとしたときに発生します。両方の関係を変更して、影響を受けるすべてのエンティティをModifiedとマークしてから、SaveChangesを呼び出してください。

+1

変更されたフラグをバブルする方法はありますか? –

+2

通常の場合、EFは自動的に変更を追跡し、フラグを手動で設定せずに 'SaveChanges'を呼び出すことができます。切断されたシナリオでは、簡単な方法はありませんが、変更したものとして手動でマークする必要があります。 –

+0

'AutoDetectChangesEnabled'がtrueに設定されていてもこのエラーが発生しました。私はそれらを読み込まなかったので、問題を解決したので、関連するエンティティは必要ありませんでした。 –

4

さまざまな状況でこの例外が発生しました。エラーメッセージが検索されたときにこの質問が表示されるので、ここに投稿しています。

部分的に読み込まれたエンティティでIObjectContextAdapter.ObjectContext.AttachTo(entitySetName, entity)を呼び出すと、例外がスローされました。エンティティの外部キーは定義されていますが、ナビゲーションプロパティはロードされませんでした。 (つまり、O.ItemIDに値がありましたが、O.Itemはnullでした)。特定の状況では、O.Itemをロードできませんでした。

オブジェクトステートマネージャが別のメソッドでオブジェクトをロードし、同じキーで定義されたオブジェクトを既に追跡していたことが問題でした。別のメソッドはオブジェクトの状態を追跡する必要がないため、そのメソッド内でIQueryable.AsNoTracking()を呼び出すことで問題は解決されました。

1

エンティティフレームワークが複数の場所にオブジェクトをロードしていたため、外部キーを更新したときに、同じオブジェクトへの参照が2つありました。私の関係が1対1であるのでエラーを引き起こしたレコードbを指す外部キー。これを解決するために、私はcontext.Entry(Object).State = EntityState.Detachedを使用し、オブジェクトを再ロードし、外部キーを変更してから変更を保存しました。

+0

ありがとう!これは私の問題を修正しました。 – brady

関連する問題