在TryUpdateModel上获取错误

时间:2014-11-07 12:58:58

标签: asp.net-mvc-3

我在使用TryUpdateModel更新带有发布值的模型时遇到错误。 错误是:

  

该物业的ID'是对象关键信息的一部分,不能修改。

我已将ID设置为数据库表中的主键。任何帮助将不胜感激。

/// <summary>
    /// Edit hotel for the event
    /// </summary>
    /// <param name="id">Eventinstance ID</param>
    /// <param name="form">Form parameters</param>
    /// <returns>return the new added hotel model to view</returns>
    [HttpPost]
    public ActionResult EditHotelForEvent(int id, FormCollection form)
    {

        EventHotelDetail hoteldetails = eventRepo.getHotelbyID(id);
        if (ModelState.IsValid && TryUpdateModel(hoteldetails)) // update the model with the form values
        {
            hoteldetails.isDefault = true;
            EventRepository.ApplyModifiedProperties(hoteldetails);
            ViewData["success"] = "Hotel added successfully";
            eventRepo.Save();
        }
        return View("AddHotelForEvent", hoteldetails);
    }

2 个答案:

答案 0 :(得分:1)

错误消息清楚地说明了问题。您正在尝试修改实体的主键,但这是不允许的。

答案 1 :(得分:1)

您无法修改主键(在您的情况下为ID)。

您为什么要更改ID? id是一个唯一的数字,它应该没有任何意义但对特定对象是唯一的,因此不应该被修改。如果你想要另一个对象创建另一个对象,但不要尝试修改id。

修改

检查这些说明,数据库中可能缺少主键:

步骤1:检查您的表是否在数据库中具有主键列。如果它没有任何主键而不是添加主键。因为如果我们不向表添加主键,那么实体框架会创建自己的密钥集合并在其中添加所有列。

步骤2:打开.edmx文件以查看表对象映射。您将能够看到表的每一列都有像主键一样的图标。所以写点击你的页面并从数据库更新.edmx。

步骤3:如果您仍然在所有列上看到与列名相同的主键图标,则需要逐个更新并转到属性窗口并将“设置实体键”属性设置为false。

取自here