이 항목에 대한 답변과 관련하여 많은 질문이 있지만 실제로는 내 시나리오와 관련이없는 것으로 보입니다.DBContext가 컨트롤러에서 생성 된 경우 여전히 두 개체 간의 관계 ... 다른 ObjectContext 개체
임이 모두 실패 내가 그것을 실행 처음으로 후속 시도를했다 Inventory CurrentInventory = db.Inventories.Find(injection.InventoryID);
에 "그들은 서로 다른 ObjectContext의 객체에 부착되어 있기 때문에 두 개체 사이의 관계를 정의 할 수 없습니다"점점.
다른 컨텍스트 개체를 얻는 방법을 이해하지 못합니다.
내 컨트롤러 :
public class InventoriesController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET: Inventories/Edit
public ActionResult Edit()
{
return View(db.Inventories.ToList());
}
// POST: Inventories/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(List<Inventory> inventory)
{
//List<Inventory> inventory
if (inventory == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
foreach (Inventory injection in inventory)
{
Inventory CurrentInventory = db.Inventories.Find(injection.InventoryID);
CurrentInventory.Date = DateTime.Now;
CurrentInventory.Quantity = injection.Quantity;
CurrentInventory.LastChangedBy = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());
}
if (ModelState.IsValid)
{
// db.Entry(inventory).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(EntityState.Modified);
}
}
편집 : 나는 그 도움이 될 경우 단지보기 위해 더 하나의 업데이트 방법에 갔다
. 나는 아직도 같은 오류를 받고 있었다. 그래서 저는 다른 컨트롤러 중 하나와 수정 된 Edit 메서드를 비교해 보았습니다. 대신에 .Find() 메서드를 사용하지 않고, 레코드를 반복하여 원하는 개체를 반환했습니다. 그렇게 할 때 문제가 해결되었습니다.
// GET: Inventories/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Inventory inventory = db.Inventories.Find(id);
ViewData["Id"] = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());
if (inventory == null)
{
return HttpNotFound();
}
return View(inventory);
}
// POST: Inventories/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "InventoryID,Quantity,LastChanged,Date")] Inventory inventory)
{
Inventory oldInventory = null;
foreach (var a in db.Inventories)
{
if (a.InventoryID == inventory.InventoryID)
{
oldInventory = a;
}
}
if (oldInventory == null)
{
return HttpNotFound();
}
if (ModelState.IsValid)
{
//db.Entry(inventory).State = EntityState.Modified;
TryUpdateModel(oldInventory);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(inventory);
}
후속 질문 :
는 .Find() 메소드는 그 객체가 완전히 다른 문맥에서 본질적이다 반환 있도록 구현에서 다른 dbContext을 만들 수 있습니까?
인벤토리 CurrentInventorydb.Inventories.Find (x => x.InventoryID == injection.InventoryID); –