【发布时间】:2012-10-18 19:59:18
【问题描述】:
有人可以帮我解决我昨晚深夜发布的问题。我仍然坚持使用编辑方法。链接如下:
除了贴出来的,我也试过了:
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 上。
在下面 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;
}
【问题讨论】:
-
Entry是DbContext(和派生类)的方法。您的变量_dataSource似乎不是DbContext(或派生类),因为DbContext没有Save方法。那么,_dataSource的类型是什么? -
我的 DataSource 接口中有
void Save();,我的 Db 文件中有void IDataSource.Save() { SaveChanges(); },它派生自 DbContext 和我的 DataSource 类。public class GlobalUnitedScDb : DbContext, IDataSource {} -
创建一个新问题以向前一个问题添加附加信息被认为是非常糟糕的形式。您应该刚刚编辑了第一个问题以包含新信息。这迫使人们回到另一个问题来理解这个问题的背景。
-
_dataSource是什么?是否声明为IDataSource?在这种情况下,您必须扩展此接口以支持设置状态或更新,例如通过添加一个方法void SetStateToModified(object entity),您将使用Entry(entity).State = EntityState.Modified实现该方法,然后以_dataSource.SetStateToModified(mensPlayer);或类似名称调用您的编辑操作。 .. -
@Slauma 哦,对不起,是的,_dataSource 被声明为 IDataSource。让我试试你刚才的建议。
标签: entity-framework ef-code-first asp.net-mvc-4 visual-studio-2012