我使用我在MS SQL Server中创建的几个表中的信息显示(sql)视图中的数据。收集的数据使用实体框架显示在asp.net mvc3站点的强类型视图中。
创建编辑页面时,所有内容都按预期显示,当我尝试保存修改后的详细信息时,这些内容无法正常工作。
页面构建
一些代码
显示编辑页面的方法
public ActionResult Edit(Guid id)
{
return View(db.ViewIndividualAlls.Where(x => x.UserGuid == id).SingleOrDefault());
}
接收HttpPost的方法
[HttpPost]
public ActionResult Edit(Guid id, ViewIndividualAll viewIndividualAll)
{
// Ind confirmed in the debugger, it works!
var ind = db.ViewIndividualAlls.Where(x => x.UserGuid == id).SingleOrDefault();
//var ind = db.ViewIndividualAlls.Find(viewIndividualAll);
try
{
if (TryUpdateModel(ind))
{
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
ViewData["error"] = "Model validation failed!";
return View(viewIndividualAll);
}
}
catch (Exception e)
{
ViewData["error"] = string.Concat(e.Message, " ", e.StackTrace);
return View(viewIndividualAll);
}
}
错误消息
The property 'whatever' is part of the object's key information and cannot be modified.
有点奇怪,因为我能够在sql server管理工作室中更新任何东西,当然除了与外键绑定的东西。
任何建议(相关)都将不胜感激
谢谢!
更新
我检查了模型浏览器中的主键,发现它们都设置错误,所以我修复了它。现在当我修复我得到这个新错误
Unable to update the EntitySet 'ViewIndividualAll' because it has a DefiningQuery
and no <UpdateFunction> element exists in the <ModificationFunctionMapping>
element to support the current operation.
所以没有快乐,更多的修复,但仍然对帮助感兴趣!
答案 0 :(得分:1)
从它的外观来看,你正在使用Guid作为关键。实体框架因Guids而变得混乱。
您得到的错误可能是因为TryUpdateModel(ind)
触及了Guid值。
您应该使用[ScaffoldColumn(false)]
标记Guid密钥(不确定这是否有帮助),或者手动将提交的字段从数据库复制到您的实体。
答案 1 :(得分:0)
解决
[HttpPost]
public ActionResult Edit(Guid id, ViewIndividualAll viewIndividualAll)
{
var ind = db.ViewIndividualAlls.Find(id);
try
{
if (TryUpdateModel(ind))
{
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
ViewData["error"] = "Model validation failed!";
return View(viewIndividualAll);
}
}
catch (Exception e)
{
ViewData["error"] = string.Concat(e.Message, " ", e.StackTrace, "\n", e.InnerException, "\n", e.HelpLink);
return View(viewIndividualAll);
}
}