【问题标题】:Unable to edit Foreign Key Property无法编辑外键属性
【发布时间】:2014-03-26 18:05:54
【问题描述】:

解决方案:同一页面上使用的其他实体与会议具有 fk 关系,因此,更改预订表中的 meetingid 会导致引用完整性错误。

我有一个家长会议实体,其中包含相关预订实体。预订实体具有字段meetingid,它是会议表的外键。

在视图中,我有

@Html.HiddenFor(model => model.bookings.meetingid)

我能够保存预订实体,并按预期更新其所有属性。

现在我想允许用户更改meetingid,所以我添加了

@Html.EditorFor(m => m.bookings.meetingid)

当我点击保存时,页面正常发布,但meetingid 没有改变。

我尝试删除隐藏的 meetingid 字段,因为它现在与文本字段同名,但这会导致引用完整性错误。

这是邮政编码...

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(vwbooking vwbooking)
{
    if (ModelState.IsValid)
    {

        db.bookings.Attach(vwbooking.bookings);
        vwbooking.bookings.update_date = DateTime.Now;
        vwbooking.bookings.updated_by = User.Identity.Name;
        db.Entry(vwbooking.bookings).State = EntityState.Modified;
        db.SaveChanges();
    }
...

【问题讨论】:

    标签: c# sql-server asp.net-mvc linq entity-framework


    【解决方案1】:

    如果您在Attach 行上遇到异常,这可能意味着您已将vwbooking.bookings.meeting 的某些属性绑定到形成视图的字段,这导致vwbooking.bookings.meeting 在控制器操作中被实例化并且vwbooking.bookings.meeting.idvwbooking.bookings.meetingid 不同。然后,您可以尝试通过将编辑操作更改为:

    var bookingsInDb = db.bookings.Find(vwbooking.bookings.id);
    db.Entry(bookingsInDb).CurrentValues.SetValues(vwbooking.bookings);
    bookingsInDb.update_date = DateTime.Now;
    bookingsInDb.updated_by = User.Identity.Name;
    db.SaveChanges();
    

    如果您在 SaveChanges 上遇到异常,原因可能是数据库中不存在与输入的 meetingid 的会议。

    无论如何您都需要删除HiddenFor

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多