2012-03-09 82 views
0

我通常使用edmx's來完成此操作,但這次爲了在我的項目中使用級聯下拉菜單,我不得不切換到使用linq to sql。如何在mvc中使用linq to sql提交對數據庫表的更改

反正這裏是我試過

[HttpPost] 
    public ActionResult Modules(ModuleViewModel mvm, FormCollection fc) 
    { 
     AllCourseDetail ACD = _dc.AllCourseDetails.Where(x => x.IdACD == mvm.cd.IdACD).FirstOrDefault(); 
     ACD = mvm.cd; 
     if (ModelState.IsValid) 
     {     
      UpdateModel(mvm); 
      _dc.AllCourseDetails.Where(w => w.IdACD == mvm.cd.IdACD); 
      UpdateModel(mvm.cd); 
      _dc.SubmitChanges(); 
      Session.Add("redirectedEditcompletedsubmission", "yes"); 
      return RedirectToAction("List"); 
     } 
     else 
     { 
      Session.Add("redirectedEditvalidation", "yes"); 
      return RedirectToAction("Index", "Home"); 
     } 
    } 

在第一次我沒有if語句上述任何東西,裏面我只有的UpdateModel和提交的變化,但無論怎樣組合,我嘗試它只是沒有按不保存。

而且mvm.cd是在視圖模型作爲CD引用的AllCourseDetail表,我必須使用一個視圖模型作爲

+0

這行代碼是做什麼的? '_dc.AllCourseDetails.Where(w => w.IdACD == mvm.cd.IdACD);'它似乎是Linq語句,但輸出不分配給任何東西。看看這裏:http://stackoverflow.com/a/1427970 – 2012-03-09 16:51:19

+0

@RobertHarvey我試圖在那裏,以防我可以使用它來確保提交知道它正在進行更改的記錄,因爲我說我嘗試過其中大部分事情我都沒有預料到,但爲了以防萬一,我仍然嘗試過。 – Myzifer 2012-03-09 16:56:19

+0

看看我鏈接的問題。它說明了你正在嘗試做什麼的一般模式。正如Jakub正確指出的那樣,NerdDinner有這類事情的代碼示例。看到這裏:http://www.asp。net/mvc/tutorials/nerddinner/provide-crud-(create,-read,-update,-delete)-data-form-entry-support – 2012-03-09 16:57:30

回答

0

似乎我從一開始就知道它所需要的只是updatemodel和submitchanges,但只是它接受所分配的表的viewmodel對象。

[HttpPost] 
    public ActionResult Modules(ModuleViewModel mvm, FormCollection fc) 
    { 
     AllCourseDetail ACD = _dc.AllCourseDetails.Where(x => x.IdACD == mvm.cd.IdACD).FirstOrDefault(); 
     if (ModelState.IsValid) 
     { 
      UpdateModel(ACD, "cd"); 
      _dc.SubmitChanges(); 
      Session.Add("redirectedEditcompletedsubmission", "yes"); 
      return RedirectToAction("List"); 
     } 
     else 
     { 
      Session.Add("redirectedEditvalidation", "yes"); 
      return RedirectToAction("Index", "Home"); 
     } 
    } 

,我忘了傳遞視圖模型對象時,在使用的UpdateModel時,它並不需要完整的路徑(ACD,「mvm.cd」);但是在回顧上一次我在mvc上使用edmx's的時候回想起它只是「cd」而已。

Ofc直接從模型表中分配值的表也可以,但不是將模型表數據分配到表記錄然後更新/保存。

+0

花了永久發佈這個作爲我的代理連接拒絕允許這個職位提交。 – Myzifer 2012-03-13 17:28:25

2

的問題是,你是從DB

裝載實體

AllCourseDetail ACD = _dc.AllCourseDetails.Where(x => x.IdACD == mvm.cd.IdACD).FirstOrDefault();

然後完全丟棄它們

ACD = mvm.cd;

然後用模型

UpdateModel(mvm);

更新您的模型,然後運行查詢並與結果

_dc.AllCourseDetails.Where(w => w.IdACD == mvm.cd.IdACD);

對不起無所作爲,而是你的方法是一團糟.. 。

我建議你看看NerdDinner example ord呃學習MVC。

+0

正如我在我的問題中所述,我知道一半的代碼可能是無用的,但我只是將它包括來顯示我剛剛嘗試updatemodel(mvm.cd)和dc.submitchanges失敗時所做的一切,所以我確認我會檢查出nerddinner看看是否顯示任何不同,但我應該有 - 然後updatemodel和submitchanges? – Myzifer 2012-03-13 16:17:13

相關問題