在MVC4和Visual Studio 2012中编辑方法

时间:2012-10-18 19:59:18

标签: entity-framework ef-code-first asp.net-mvc-4 visual-studio-2012

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

Last night question

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

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;
    }

1 个答案:

答案 0 :(得分: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);
    }

就像这一切都运行正常,虽然我假设我可以实现更新到整个DbSet,就像我使用Save一样。