2014-03-26 86 views
0

解決方案:在與會議具有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

如果你上了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

+0

哇 - 非常好。它在Attach上。謝謝。 – tintyethan