2
保護されたディクショナリメンバにEF6エンティティをロードするベースコントローラがあります。しかし、何とか他のコントローラがそのエンティティを更新するのを止めます。以下は、単純化されたコードされた - それはあなたのようdb.Entry(mt).State = EntityState.Modified;
MVC5 - ベースコントローラに読み込まれたエンティティがエンティティの更新と他の場所で競合しています
でスローされ
public abstract class BaseController : Controller {
protected IDictionary<string, int> MyList;
public BaseController() {
MyList = new Dictionary<string, int>();
foreach (var rc in db.MyTable.Where(r => r.IsActive).ToList())
MyList.Add(rc.Name, rc.Id);
ViewBag.MyListViewBag = MyList;
}
}
public class MyController : BaseController {
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Name,...other properties")] MyTable mt) {
if (ModelState.IsValid)
{
db.Entry(mt).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(mt);
}
}
エラーがされ、「同じタイプの別のエンティティが既に同じ主キー値を持っているので、タイプのエンティティをアタッチに失敗しました」 BaseControllerはまずリスト内のエンティティをロードします。これは、少なくとも(私はそれが思った)あらゆる接続を厳重にする必要があります。その周りに道がありますか?
ありがとう、これは固定です。エンティティがベースコントローラでアクセスされるまで、既存のコードが正常に動作していたのはまだ変わっていません。 – Achilles