C# 无法编辑外键属性

C# 无法编辑外键属性,c#,sql-server,asp.net-mvc,linq,entity-framework,C#,Sql Server,Asp.net Mvc,Linq,Entity Framework,解决方案:同一页面上使用的其他实体与会议具有fk关系,因此,更改预订表中的meetingid会导致引用完整性错误 我有一个与从属预订实体相关的家长会议实体。预订实体具有字段meetingid,该字段是会议表的外键 在我看来,我有 @Html.HiddenFor(model => model.bookings.meetingid) 我能够保存预订实体,并按预期更新其所有属性 现在我想允许用户更改会议ID,因此我添加了 @Html.EditorFor(m => m.bookings.m

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

我有一个与从属预订实体相关的家长会议实体。预订实体具有字段
meetingid
,该字段是会议表的外键

在我看来,我有

@Html.HiddenFor(model => model.bookings.meetingid)
我能够保存预订实体,并按预期更新其所有属性

现在我想允许用户更改
会议ID
,因此我添加了

@Html.EditorFor(m => m.bookings.meetingid)
当我单击save时,页面将正常发布,但会议ID保持不变

我尝试删除隐藏的
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();
    }
...

如果在
Attach
行中出现异常,则可能意味着您已将
vwbooking.bookings.meeting
的某些属性绑定到视图字段中,从而导致
vwbooking.bookings.meeting
在控制器操作中实例化,并且
vwbooking.bookings.meeting.id
不是与
vbooking.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
的会议

在任何情况下,您都需要删除的隐藏项