解决方案:在同一页面上使用了与会议具有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();
}
...
答案 0 :(得分:1)
如果在Attach
行上获得异常,则可能意味着您绑定了vwbooking.bookings.meeting
的某些属性以形成视图的字段,这导致vwbooking.bookings.meeting
在控制器中实例化行动vwbooking.bookings.meeting.id
与vwbooking.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
。