C# 无法编辑外键属性
解决方案:同一页面上使用的其他实体与会议具有fk关系,因此,更改预订表中的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
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
的会议
在任何情况下,您都需要删除的隐藏项