MVC音乐商店保存并发。是什么造成的?

时间:2011-08-10 13:42:45

标签: asp.net asp.net-mvc

我正在做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);
    }

我是唯一一个访问我所做网站的人,因为我只在我的机器上进行本地操作,我被告知别人可能会改变一些东西但事实并非如此。发生了什么事?

1 个答案:

答案 0 :(得分:6)

此问题在musicstore codeplex网站的this页面上进行了解释。

以下是摘录:

在Album类中,您已经在类上定义了[Bind(Exclude =“AlbumId”)],这意味着代码不会尝试从表单中绑定AlbumId。这很好,除了在编辑页面上,你传入一个填充的Album,大概是使用绑定填充,这当然忽略了Album Id,因此传递给edit方法的对象的AlbumId是始终为0,这会引发误导性的并发错误,因为没有行受到影响,因为没有ID为0的相册。