0

我是新來的MVC 3和實體框架,所以我想知道什麼是最好的方法。MVC3和EF:如何處理嵌套實體(父,子和孫)的CRUD操作

基本上,我有3個實體:課程,模塊和章節。每個人都是具有一對多關係的下一個家長(課程有很多模塊,模塊有很多章節)。我有一個列SortOrder模塊和章節,讓他們按順序排列。

我的想法是在更新父項時使用子實體的部分視圖。

我心裏有3次:

  1. 創建/更新課程:一門課程
  2. 課程模塊(用於更新課程基本上是一個不同的觀點),其中有一個選項,添加多個部分的所有基本信息視圖,每個視圖創建模塊
  3. 場時間軸(爲更新過程中仍然是一個不同的視圖),其中列出所有模塊(在不同的div),並具有添加多個局部視圖的選項,每個創建一個章

我的計劃聽起來合理嗎?我打算使用隱藏字段來存儲ID。我也希望保存異步發生。

任何建議或信息將不勝感激。謝謝!

+2

你的問題有點模糊和不確定。這聽起來很合理,而且肯定是可行的。我建議你在項目設計或實施過程中遇到問題時,只需開始項目並提出更具體的問題。 – Slauma 2013-03-07 21:27:17

+0

謝謝!欣賞它:) – AnimaSola 2013-03-08 02:21:04

+0

我會補充的唯一建議是,如果你打算異步做事,你應該確保你熟悉JQuery – StanK 2013-03-08 04:25:26

回答

1

我認爲這是你的後,但不知道。爲了處理子孫實體的持久性,你可以用幾種方法來做到這一點。您可以分別對每個實體執行粗泥土作業。所以這將涉及例如通過參考課程自己保存模塊,可能courseId。

或者你可以看看只保存聚合根,在這種情況下,它看起來像它的課程實體。這將涉及到加載課程,在課程中填充模塊,併爲每個模塊填充章節。那麼當你`db.Courses.Add(newCourse); db.SaveChanges();所有的實體將被堅持。您必須確保您的外鍵和模型參考安裝正確。

例如,爲了節省子實體:

public ActionResult DoSomething(int courseId, Module newModule) 
{ 
    var course = someService.LoadCourse(courseId); 
    course.Modules.Add(newModule); 

    using (var db = new MyDbContext()) 
    { 
     db.Courses.Add(course); 
     db.SaveChanges(); 
    } 

    return RedirectToAction("Success"); 
} 

也可以單獨保存:

public ActionResult DoSomething(Module newModule) 
{ 
    using (var db = new MyDbContext()) 
    { 
     //You will need to make sure newModule.CourseId is set correctly 
     db.Modules.Add(newModule); 
     db.SaveChanges(); 
    } 

    return RedirectToAction("Success"); 
} 

取決於你的觀點,你就可以判斷哪條路最好走。關於異步保存,您將能夠通過jQuery將這些模型發佈爲json來調用這些端點。在附註中,有一點需要考慮的是爲json請求創建一個自定義Anti Forgery Token驗證器,example