2011-04-21 78 views
0

我从我在MS SQL Server中创建多个表显示从与信息(SQL)的视图数据。所收集的数据以实体框架显示在asp.net mvc3站点的强类型视图中。更新视图(从SQL Server)在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 Management Studio中几乎任何东西,除了与当然的外键约束的东西。

任何建议(有关)在所有将不胜感激

谢谢!

更新

我检查了主键在模型浏览器,发现他们所有设置错误,所以我固定它。现在当我修复,我得到这个新的错误

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

解决

[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); 
    } 
} 
1

从它您正在使用的Guid工作作为重点的样子。实体框架与Guids混杂为关键。 您得到的错误可能是因为TryUpdateModel(ind)触及了Guid值。 您应该标记与[ScaffoldColumn(false)]的GUID键(不知道这是否会帮助)或手动提交领域从数据库复制到你的实体。

+0

用的GUID工作通常工作就好了其他地方,但它可能是麻烦与SQL视图。无论如何,我会给它一个 – 2011-04-21 13:06:42

+0

到目前为止没有运气,也许我把[ScaffoldColumn(false)]放在了错误的属性上。让我们继续使用Google! :) – 2011-04-21 13:38:09