0

これは以前に尋ねられたことがありますが、利用可能な回答はどれも私のケースには当てはまらないようです。いくつかの検証を実行するには、既にモデルにバインドされている同じエンティティを DB からリロードする必要があります。以下の場合、エラーが発生します。私はほとんど正気を失っています。

[HttpPost]
public ActionResult Edit(Tekes tekes, FormCollection fc)
{
  ...
  Tekes myTekes = db.Tkasim.Find(tekes.TeksID);
  <some validation here>
  if (ModelState.IsValid)
  {
     db.Entry(tekes).State = EntityState.Modified;
     db.SaveChanges();
     return RedirectToAction("Details", new { id = tekes.TekesID });
  }
}
4

1 に答える 1

0

データベースから同じエンティティを取得する必要がある理由がわかりません。とにかく、問題はステートメントがオブジェクトをコンテキストにFind追加し、その後ステートメントが同じことをしようとすることです。検証が何であるかは明確ではありませんが、 by を置き換えることでこれを解決できると思いますTekesdb.Entry(tekes).State = EntityState.ModifiedFind

var myTekes = db.Tkasim.AsNoTracking().Single(x => x.TeksId == tekes.TeksID);

AsNoTrackingは、エンティティをキャッシュと状態マネージャーに追加せずにフェッチするように EF に指示します。

于 2012-11-26T23:20:02.827 に答える