2012-03-09 33 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

相关问题