2012-10-30 16 views
2

使用MVC4和EF5 codefirst。遇到一個問題,即通過引用具有外鍵的行創建新的數據記錄。清單創建的條目一切都看起來不錯:MVC,實體框架,未顯示創建新項目的外鍵數據

@foreach (var item in Model) { 
    @Html.DisplayFor(modelItem => item.Location.name) 
    @Html.DisplayFor(modelItem => item.Action.name) 
    ... 

創建一個新的記錄參考無法顯示外國內容(姓名):

... 
    @Html.LabelFor(model => model.locationID) 
    @Html.DisplayFor(model => model.Location.name) 

    @Html.LabelFor(model => model.actionID) 
    @Html.DisplayFor(model => model.Action.name) 
    ... 

的外鍵正確填寫控制器(見至簡體例子)

public ActionResult Create() 
    { 
     Timerecord tm = new Timerecord(); 

     tm.currentTime = DateTime.Now; 
     tm.locationID = 1; 
     tm.actionID = 5; 

     ViewData.Model = tm; 
     return View(); 
    } 

並且記錄在數據庫中正確創建。只是名稱不顯示在視圖上。在創建過程中,我是否必須獲取關聯的reocrd自己?

+0

+1這就是我一直在做的,導航屬性工作良好後,你只需使用foreignkeyid插入實體到數據庫,但我真的很想知道是否有解決方法。 –

+0

您可以顯示Timerecord類並查看創建嗎? –

+0

@sormii,這就是您使用外鍵屬性定義導航和集合屬性時所獲得的結果。您可以保存實體,然後使用「Include」擴展方法熱切加載相關實體。 – danludwig

回答

0

我在代碼中看不到SaveChanges()的任何調用。您需要調用此函數才能使外鍵屬性加載導航屬性。無論是或者,就像你在問題結束時所說的那樣,明確地加載它們。

+0

親自參考: tm.Location = dbLoc.Location.Find(tm.locationID); tm.Action = dbAct.Action.Find(tm.actionID); – Gerard

+0

然後你應該更新你的問題中的代碼,以表明它應該提供不同的EF行爲和不同的結果。 – danludwig