2013-07-10 108 views
0

多個表我有一個視圖模型,其中包括多個模型:將數據保存到從控制器

public class MyViewModel 
{ 
    Music.Models.Organizations Organizations {get; set;} 
    Music.Models.People People {get; set;} 
} 

當相應的字段由用戶填寫我的觀點和用戶按下提交按鈕,我想將更改保存到我的控制器的相應表:(我有MyViewModel名爲DB的一個實例)

[HttpPost] public ActionResult Submit(MyViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
    db. //what do I do here? 
    } 
} 

在教程和這樣的,我只看到使用一次在一個典範,因此他們可以做點像

db.People.Add(model); 
db.SaveChanges(); 

當用戶按下提交按鈕時,數據被保存到多個表中,我不確定如何保存對ViewModel中每個表的更改。任何援助將是偉大的!謝謝。

回答

0

您只需保存視圖模型上屬性的模型。從使用教程你的例子,如果你要添加一個新的記錄每個這兩個的,它可能是這樣的:

db.People.Add(model.People); 
db.Organizations.Add(model.Organizations); 
db.SaveChanges(); 

你可以讓所有的添加/修改/ etc中。在數據庫上下文中(db對象及其屬性)以及在您致電.SaveChanges()時,它們都將被髮送到數據庫。在上面的代碼中,數據庫調用最終將成爲兩個INSERT語句。

+0

zomg ...我一直在考慮在單線解決方案上如此努力,甚至沒有考慮需要兩種不同的語句。非常感謝! – SantasNotReal

+0

而不是爲每個頁面創建一個新的ViewModel,只包含將用於該頁面的模型,我不能只創建一個包含我所有模型並將其用於每個頁面的上下文文件?你是否知道兩者之間是否存在效率差異? – SantasNotReal

+0

@SantasNotReal:這聽起來不是一個好主意,除非我誤解了你的問題。無論頁面實際需要什麼,使用* all *可能的數據填充每個頁面將是非常低效的。或者,對於該頁面不需要的數據,只有一個具有大量「空值」值的巨型全部收集對象是有點草率並且難以維護的。最好保持每個視圖模型適合使用它的頁面(或多個頁面)。一般來說,許多小班比一個大班更好。 – David

相關問題