我正在做MVC音乐商店教程并且我已经完成,每个工作都很好,但出于某种原因,当我在管理员帐户上编辑相册时,当我尝试保存更改时会出现此错误。它突出显示 db.SaveChanges(); 导致此问题的原因是什么?
存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。刷新ObjectStateManager条目。
public ActionResult Edit(int id)
{
Album album = db.Albums.Find(id);
ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
return View(album);
}
//
// POST: /StoreManager/Edit/5
[HttpPost]
public ActionResult Edit(Album album)
{
if (ModelState.IsValid)
{
db.Entry(album).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
return View(album);
}
我是唯一一个访问我所做网站的人,因为我只在我的机器上进行本地操作,我被告知别人可能会改变一些东西但事实并非如此。发生了什么事?
答案 0 :(得分:6)
此问题在musicstore codeplex网站的this页面上进行了解释。
以下是摘录:
在Album类中,您已经在类上定义了[Bind(Exclude =“AlbumId”)],这意味着代码不会尝试从表单中绑定AlbumId。这很好,除了在编辑页面上,你传入一个填充的Album,大概是使用绑定填充,这当然忽略了Album Id,因此传递给edit方法的对象的AlbumId是始终为0,这会引发误导性的并发错误,因为没有行受到影响,因为没有ID为0的相册。