2011-02-24 80 views
1

MVC的新手,所以我相信有一個正確的方法來做到這一點,我失蹤了。MVC 3創建與實體框架和兒童實體的行動

我有一個實體「事件」,有一個孩子/相關實體「EventTime」。當我創建我的編輯動作時,我可以用linq語句加載事件模型。

Event mEvent = db.Events.Single(s => s.EventID == id); 

然後在我看來,我步行訪問對象的孩子:

@Html.EditorFor(model => model.Event.EventTime.DateStart) 

這個偉大的工程。編輯動作獲取值,進行魔術綁定並保存更改。

UpdateModel(mEvent); 
db.SaveChanges(); 

現在到我的問題。創建操作。在asp.net上的示例音樂商店應用程序中,他們告訴您創建一個新的空模型以傳遞給您的視圖。

Event mEvent = new Event(); 

但是我認爲,當它擊中孩子實體Event.EventTime任何引用得到一個例外。另外在控制器創建動作,如果我嘗試創建新的mEvent對象後設置任何屬性我得到一個對象引用異常。

Event.EventTime.DateStart = DateTime.Now; 

我以爲EF會在您訪問它時奇蹟般地創建孩子。我認爲這個問題是因爲我沒有從數據庫創建模型,它沒有外鍵值來引用這些對象?

那麼我想怎麼做呢?我想過一個ViewModel並加載每個實體,然後在我的HTTPPost Action中,我假設我必須以最低的子first order更新數據庫並更新引用,因爲每個實例都保存到數據庫中?看起來像它會起作用,但感覺它正在挫敗EF的目的。

感謝您的幫助。

+0

Afaik EF爲實體提供了一個工廠構造函數:db.Events.Create()(或某些這樣的名稱)。您可能仍然需要單獨實例化EventTime並將其添加到您的Event實體,因爲EF不會奇蹟般地爲您產生新的實體。 – 2011-02-24 23:08:46

回答

0

莫滕,你是對的。我必須創建一個EventTime對象的實例並將其分配給Event.EventTime。這工作。我想這是有道理的,它不會爲我自動做到這一點。 Thx的評論。