无法编辑外键属性

时间:2014-03-26 18:05:54

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

解决方案:在同一页面上使用了与会议具有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();
    }
...

1 个答案:

答案 0 :(得分: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