Ich weiß, es gibt eine Menge Fragen mit der Antwort zu diesem Thema, aber ich kann nicht etwas zu meinem Szenario finden.DBContext generiert im Controller, immer noch Die Beziehung zwischen den beiden Objekten ... verschiedene ObjectContext-Objekte
Im bekommen „Die Beziehung zwischen den beiden Objekten kann nicht definiert werden, da sie auf verschiedene Objekte Object gebunden sind“ auf Inventory CurrentInventory = db.Inventories.Find(injection.InventoryID);
Dies das erste Mal arbeitete ich es lief und nachfolgende Versuche scheitern alle.
Ich verstehe nicht, wie ich verschiedene Kontextobjekte bekomme.
Mein Controller:
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:
ich zu einer einzigen Aktualisierung Methodik ging zurück, nur um festzustellen, ob das helfen würde. Ich habe immer noch den gleichen Fehler bekommen. Also habe ich es mit einer meiner anderen Controller-Edit-Methoden verglichen und festgestellt, dass ich die .Find() -Methode nicht verwendet habe, sondern über sie selbst iteriert und das gewünschte Objekt zurückgegeben habe. Das Problem wurde behoben.
// 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);
}
Follow-up-Frage:
Ist die .Find() -Methode eine weitere DbContext bei der Umsetzung schaffen, so dass zurückgegebenen Objekte vollständig von Natur aus einem anderen Kontext sind?
Sie sollten Inventar CurrentInventorydb.Inventories.Find (x => x.InventoryID == injection.InventoryID); –