0

有人可以帮我解决我昨晚深夜发布的问题。我仍然坚持使用编辑方法。下方链接:

昨晚的问题

除了发布的内容外,我还尝试过:

HttpPost 编辑:

[HttpPost]
    public ActionResult Edit(MensPlayer mensPlayer)
    {
        if (ModelState.IsValid)
        {
            //Save Player
            _dataSource.Entry(mensPlayer).State = EntityState.Modified;
           _dataSource.Save();

           TempData["message"] = string.Format("{0} has been saved", mensPlayer.Name);
            return RedirectToAction("Detail", "MensPlayer", new {id = mensPlayer.Id});
        }
        return View(mensPlayer);
    }

上述方法的问题是Entry(mensPlayer).State,代码不会在 .Entry() 处构建,我似乎不知道该方法在哪里被继承。请注意,这是 MVC-Music-Store 示例中使用的技术。

我还尝试过 Pro ASP.NET MVC3 Framework 书中的这种技术。

[HttpPost]
    public ActionResult Edit(MensPlayer mensPlayer)
    {
        if (ModelState.IsValid)
        {
            //Save Player
           _dataSource.Save();

           TempData["message"] = string.Format("{0} has been saved", mensPlayer.Name);
            return RedirectToAction("Detail", "MensPlayer", new {id = mensPlayer.Id});
        }
        return View(mensPlayer);
    }

这种技术可以构建,但似乎不会将更改保存到数据库。

我怎样才能让它工作?我错过了什么?

如果有人需要查看整个解决方案,整个源代码都在 GitHub 上。

GitHub

在下面 Slauma 的帮助下,我现在进行了如下修改:

添加void Update();到 IDataSource 并将以下内容添加到 Db 类

 void IDataSource.Update()
    {
        Entry(MensPlayers).State = EntityState.Modified;
    }

HttpPost 编辑:

[HttpPost]
    public ActionResult Edit(MensPlayer mensPlayer)
    {
        if (ModelState.IsValid)
        {
            //Save Player
            _dataSource.Update();
           _dataSource.Save();

           TempData["message"] = string.Format("{0} has been saved", mensPlayer.Name);
            return RedirectToAction("Detail", "MensPlayer", new {id = mensPlayer.Id});
        }
        return View(mensPlayer);
    }

所有构建,但随后我收到此错误 实体类型 DbSet`1 不是当前上下文模型的一部分。

据信起源于:

void IDataSource.Update()
    {
        Entry(MensPlayers).State = EntityState.Modified;
    }
4

1 回答 1

0

在上面评论中的 Slauma 的帮助下,这就是他建议我做的事情,并且它有效。

添加到 IDataSource 接口:

 void Update(MensPlayer mensPlayer);

更新在 Db 类中实现:

void IDataSource.Update(MensPlayer mensPlayer)
    {
        Entry(mensPlayer).State = EntityState.Modified;
    }

编辑动作:

[HttpPost]
    public ActionResult Edit(MensPlayer mensPlayer)
    {
        if (ModelState.IsValid)
        {
            //Save Player
            _dataSource.Update(mensPlayer);
           _dataSource.Save();

           TempData["message"] = string.Format("{0} has been saved", mensPlayer.Name);
            return RedirectToAction("Detail", "MensPlayer", new {id = mensPlayer.Id});
        }
        return View(mensPlayer);
    }

就像这样,一切都很好,尽管我假设我可以像使用 Save 一样对整个 DbSet 实施更新。

于 2012-10-18T22:03:53.280 回答