Entity Framework 4.0 を使用しています。データベースのデータを更新しているときに問題に直面しています。この例外が発生しています:
同じキーを持つオブジェクトが ObjectStateManager に既に存在します。
ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません。
私はリレーショナルデータベースに取り組んでいます。以下は 3 つのエンティティであり、関係があります。
1 to * 1 to *
Ceremony -----------> Menu ------------> CourseOption
Menus
既にand を含むセレモニーを更新すると、すべて正常に動作しCourseOptions
ます。問題は、更新時にセレモニーにnewMenu
とentryを挿入するときに発生します。CourseOption
上記の例外が発生しました。
既存のセレモニーを更新する C# コード
public HttpResponseMessage PutCeremony(int id, Ceremony ceremony)
{
if (ModelState.IsValid && id == ceremony.Id)
{
db.Entry(ceremony).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
return Request.CreateResponse(HttpStatusCode.NotFound);
}
return Request.CreateResponse(HttpStatusCode.OK, ceremony);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
どうすればこの問題を解決できますか? 助けてください
編集
今日、私はこれで一日を過ごし、多くのアーティカルとスタックオーバーフローの質問を読みました。私はそれを見つけたonce a product is fetched from the Context, the context is keeping track of it
ので、代わりに使用するのはなぜですか:
db.Entry(ceremony).State = EntityState.Modified;
使った
db.Entry(db.Ceremonies.Find(ceremony.Id)).CurrentValues.SetValues(ceremony);
この変更を行うと、例外がなくなり、Ceremony エンティティのプロパティが適切に変更されます。ただし、セレモニー関連の Menus エントリと CourseOptions エントリは更新されていません。提案をお願いします。私はEFでまったく新しいです。