7

既存のエンティティを更新しようとしています。

次のコードがあります。

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メソッドは例外をスローします。

参照整合性制約違反が発生しました: 参照制約を定義するプロパティ値が、リレーションシップ内のプリンシパル オブジェクトと従属オブジェクトの間で一貫していません。

どうすればこれを修正できますか?

4

6 に答える 6

5

別の状況でこの例外が発生しました。エラーメッセージを検索するとこの質問が出てくるので、ここに投稿しています。

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

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

于 2015-03-28T21:38:04.570 に答える
0

これは古い投稿かもしれませんが、次のことがうまくいきました

に設定SaveOptions optionしますSaveOptions.DetectChangesBeforeSave

于 2019-05-25T20:34:00.587 に答える